áá±áá¹áá¬ááŸáá·áºááŒá¬ážááá¯ááºáá«á!
ááœááºá 24-25 áááºáá±á·ááœááºá Highload++ Siberia 2019 ááœááºáááá·áºááᯠNovosibirsk ááœááºáá»ááºážááá²á·áá«áááºá áá»áœááºá¯ááºááá¯á·ááá°áá»á¬ážáááºáž ááá¯áá±áá¬ááœáẠááŸááá±áá«áááºá
á€ááá¯á·á
áºááœááºá áááºá Oracle á¡ááááá¬ááᯠá
ááºážáááºááá¯ááºá
á±ááẠáá»áœááºá¯ááºááá¯á·á booth ááœááºááŸááá±á¬ ááŒá¿áá¬áá»á¬ážááᯠááá·áºá¡á¬ážáá»áŸáá±áá±ážááá¯áá«áááºá ááŒááºáá±á¬ááºááŸá¯á¡á±á¬ááºááœáẠááŒá¿áᬠ8 áá¯á á¡ááŒá±ááœá±ážáá»ááºááŸá¯áá»á¬ážááŸáá·áº ááŸááºážáááºážáá»ááºááá¯á·ááŒá
áºáááºá
á¡á±á¬ááºáá« script ááá¯áá¯ááºáá±á¬ááºááŒááºážáááááºá¡ááŒá áºáá»áœááºá¯ááºááá¯á·ááŒááºáááá·áºá¡áá»á¬ážáá¯á¶áž sequence value ááá¬áá²á
create sequence s start with 1;
select s.currval, s.nextval, s.currval, s.nextval, s.currval
from dual
connect by level <= 5;
- 1
- 5
- 10
- 25
- ááá¯ááºáá°ážá á¡ááŸá¬ážáá áºáá¯ááŸááááºá
á¡ááœá±Oracle documentation (8.1.6 ááŸááá¯ážáá¬áž) á¡á-
SQL áá¯ááºááŒááºáá»ááºáá
áºáá¯á¡ááœááºážá Oracle ááẠá¡áááºážáá
áºáá¯áá»áŸáẠáá
áºááŒáááºáᬠá¡á
á®á¡áá¶ááᯠááá¯ážáá±ážáááºááŒá
áºáááºá ááŒá±ááŒá¬áá»ááºáá
áºáá¯ááœáẠNEXTVAL ááᯠá¡ááá¯ážá¡áá¬ážáá
áºáá¯áááºááá¯ááá«áááºáá±áá«á Oracle ááẠáááºááá¯ááºááᯠáá
áºááŒáááºááá¯ážááŒá®áž NEXTVAL áááŒá
áºáá»ááºááŸá¯á¡á¬ážáá¯á¶ážá¡ááœáẠáá°áá®áá±á¬áááºááá¯ážááᯠááŒááºáá±ážáááºá ááŒá±ááŒá¬áá»ááºáá
áºáá¯ááœáẠCURRVAL ááŸáá·áº NEXTVAL ááŸá
áºáá¯áá¯á¶ážá¡á¬áž ááá¯ážáá¬ážáá»ááºáá»á¬ážáá«ááŸááááºááá¯áá«á Oracle ááẠá¡á
á®á¡á
á¥áºááᯠááá¯ážááŒá®áž áá¯ááºááŒááºáá»ááºá¡ááœááºáž áááºážááá¯á·á á¡ááŸá¬á
á¬ááá«áááºáá² CURRVAL ááŸáá·áº NEXTVAL á¡ááœáẠáá°áá®áá±á¬áááºááá¯ážááᯠááŒááºáá±ážáááºá
ááá¯á·ááŒá±á¬áá·áº á¡ááŒáá·áºáá¯á¶ážáááºááá¯ážááẠ5 ááŒá áºááá·áº ááá¯ááºážá¡áá±á¡ááœááºááŸáá·áº ááá¯ááºáá®áááºááŒá áºáááºá.
á¡á±á¬ááºáá« script ááᯠrun ááŒááºážááŒá±á¬áá·áº ááá¬ážááœáẠá¡áááºážáááºáá»áŸááŸááááºáááºážá
create table t(i integer check (i < 5));
create procedure p(p_from integer, p_to integer) as
begin
for i in p_from .. p_to loop
insert into t values (i);
end loop;
end;
/
exec p(1, 3);
exec p(4, 6);
exec p(7, 9);
- 0
- 3
- 4
- 5
- 6
- 9
á¡ááœá±Oracle documentation (11.2 ááŸááá¯ážáá¬áž) á¡á-
áááºááá·áº SQL ááŒá±áá¬áá»ááºááá¯áááᯠááá¯ááºáá±á¬ááºáá® Oracle ááẠááœááºááá¯ááºáá±á¬áááºáááºáá±ážá¡ááŸáẠ(ááá·áºá¡ááœááºááááá¯ááºáá«) á¡ááŸááºá¡áá¬ážááŒá¯áá«áááºá ááá¯á·áá±á¬ááºá áá¯ááºááŒááºáá»áẠáá»ááºááœááºáá«á Oracle ááẠáááºážááᯠá¡ááá¯á¡áá»á±á¬áẠááŒááºááŸáá·áºááŒá®áž áááºááá¯ááºáᬠá¡ááŸá¬ážáá¯ááºááᯠSQLCA ááŸá SQLCODE ááá¯á· ááŒááºáá±ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá INSERT ááŒá±ááŒá¬áá»ááºáá áºáá¯ááẠáá°ážááŒá¬ážáá±á¬á¡ááœáŸááºážáá áºáá¯ááœáẠáááºáá±áá±á¬áááºááá¯ážáá áºáá¯ááᯠááá·áºááœááºážáááºááŒáá¯ážá á¬ážááŒááºážááŒáá·áº á¡ááŸá¬ážá¡ááœááºážáá áºáá¯ááŒá áºáá±á«áºáá¬áá«áá á¡ááá¯áá«áá¯ááºááŒááºáá»ááºááᯠááŒááºááŸáá·áºáá«áááºá
áá±á¬ááºáááºáá¶á០HP ááá¯áá±á«áºááá¯ááŒááºážááá¯áááºáž áá áºáá¯áááºážáá±á¬áá¯ááºááŒááºáá»ááºáá áºáá¯á¡ááŒá Ạááá·áºááœááºážá ááºážá á¬ážááŒá®áž áá¯ááºáá±á¬ááºáá«áááºá ááá¯á·ááŒá±á¬áá·áºá ááááá¯á¶áž HP áá±á«áºááá¯ááŸá¯ááẠááŸááºáááºážáá¯á¶ážáá¯ááá·áºááœááºážááŒá®áž á¡á±á¬ááºááŒááºá áœá¬ááŒá®ážáá¯á¶ážááœá¬ážáá«áááºá áá¯ááá HP áá±á«áºááá¯ááŸá¯ááẠá¡ááŸá¬ážáá áºáá¯ááŸáá·áº á¡áá¯á¶ážáááºááŒá®áž áááºážááá·áºááœááºážááẠá á®áá¶áá¬ážááá·áº á áá¯áá¹áááŸááºáááºážááᯠááŒááºááŸáá·áºáááºá ááááá¡ááŒáááºáá±á«áºááá¯ááŸá¯ áá»ááºááœááºááŒááºážá ááá¬ážááœáẠááŸááºáááºážáá¯á¶ážáá¯ááŸááááºá.
á¡á±á¬ááºáá« script ááᯠrun ááŒááºážááŒá±á¬áá·áº ááá¬ážááœáẠá¡áááºážáááºáá»áŸááŸááááºáááºážá
create table t(i integer, constraint i_ch check (i < 3));
begin
insert into t values (1);
insert into t values (null);
insert into t values (2);
insert into t values (null);
insert into t values (3);
insert into t values (null);
insert into t values (4);
insert into t values (null);
insert into t values (5);
exception
when others then
dbms_output.put_line('Oops!');
end;
/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
á¡ááœá±Oracle documentation (11.2 ááŸááá¯ážáá¬áž) á¡á-
á á áºáá±ážááŸá¯ááá·áºáááºáá»ááºáá áºáá¯ááẠááá·áºá¡á¬áž ááá¬ážááŸá á¡áááºážáá áºáá¯á á®á០áá»á±áááºá á±ááá·áº á¡ááŒá±á¡áá±áá áºáá¯ááᯠáááºááŸááºáá±ážááá¯ááºáááºá ááá·áºáááºáá»ááºáá»á¬ážááᯠáá»á±áááºá á±áááºá ááá¬ážááŸá á¡áááºážáá áºáá¯á á®ááẠá¡ááŒá±á¡áá±ááᯠá¡ááŸááºááŒá áºá á± ááá¯á·ááá¯áẠá¡áááºááá ( null áá áºáá¯ááŒá±á¬áá·áºááŒá áºá á±) ááŒá¯áá¯ááºááá«áááºá Oracle ááẠáá®ážááŒá¬ážá¡áááºážáá áºáá¯á¡ááœáẠááá·áºáááºááŸá¯á¡ááŒá±á¡áá±áá áºáá¯ááᯠá¡áá²ááŒááºááá·áºá¡áá«á á¡ááŒá±á¡áá±ááŸá áá±á¬áºáá¶á¡áááºáá»á¬ážááẠááá¯á¡áááºážááŸá áá±á¬áºáá¶áááºááá¯ážáá»á¬ážááᯠáááºááœáŸááºážáá«áááºá
ááá¯á·ááŒá±á¬áá·áºá áááºááá¯áž null ááẠá á áºáá±ážááŸá¯ááᯠáá»á±á¬áºááœá¬ážáááºááŒá áºááŒá®ážá áááºááá¯áž 3 ááᯠááá·áºááœááºážááẠááŒáá¯ážáááºážááá·áºááá¯ááºá¡á±á¬áẠá¡áááºááá ááá±á¬ááºááᯠá¡á±á¬ááºááŒááºá áœá¬ áá¯ááºáá±á¬ááºááœá¬ážáá«áááºá áááºážááŒá®ážáá±á¬ááºá á¡ááŸá¬ážááá¯ááºááœááºááá·áº ááá±á¬ááºááẠááŒáœááºážáá»ááºá¡á¬áž ááŸááºážááœá¬ážáááºááŒá áºááŒá®ážá áá±á¬ááºááŒááºááœá²áááºááá¯ááºáá«á ááá¬ážááŸá¬ áá±ážáááºážáá»ááºáá±áááá·áºáááºá áááºááá¯ážáá»á¬áž 1, null, 2 ááŸáá·áº null ááá¯á·ááᯠáááºáá¶ááŒá¯áá¯ááºáá«á
áááºáááºááá¯ážá¡ááœá²ááœá±á ááá±á¬ááºáá²ááŸá¬áá² áá±áá¬ááœááºááœá± áá°ááá²á
create table t (
a char(1 char),
b char(10 char),
c char(100 char),
i number(4),
j number(14),
k number(24),
x varchar2(1 char),
y varchar2(10 char),
z varchar2(100 char));
insert into t (a, b, i, j, x, y)
values ('Y', 'ÐаÑÑ', 10, 10, 'Ð', 'ÐаÑÑ');
- A ááŸáá·áº X
- B ááŸáá·áº Y
- C ááŸáá·áº K
- C ááŸáá·áº Z
- K ááŸáá·áº Z
- áá«áá²á· J
- J ááŸáá·áº X
- á¡á¬ážáá¯á¶ážá á¬áááºáž
á¡ááœá±á€áááºááŸá¬ Oracle ááœáẠáá±áá¬á¡áá»áá¯ážá¡á á¬ážá¡áá»áá¯ážáá»áá¯ážááᯠááááºážáááºážááŒááºážááá¯ááºáᬠá á¬áááºážááŒá¯á á¯ááŒááºáž (12.1.0.2) á០áá±á¬ááºááŸá¯ááºáá»ááºááŒá áºáááºá
CHAR áá±áᬠá¡áá»áá¯ážá¡á
á¬áž
CHAR áá±áá¬á¡áá»áá¯ážá¡á
á¬ážááẠáá±áá¬áá±á·á
áºá¡áá¹ááá¬á¡á
á¯ááœáẠáá¯á¶áá±á¡áá»á¬ážá¡ááá¯á
á¬áá¯á¶ážááᯠáááºááŸááºáááºá áááºááá±áá¬áá±á·á
áºááá¯áááºáá®ážáá±á¬á¡áá«ááœáẠáááºááẠáá±áá¬áá±á·á
áºáá¬ááºáá±á¬ááºáááºááŸááºááŸá¯ááᯠáááºááŸááºáá±ážáááºá Oracle ááẠCHAR áá±á¬áºáá¶ááœáẠááááºážáááºážáá¬ážáá±á¬ áááºááá¯ážáá»á¬ážá¡á¬ážáá¯á¶ážááẠááœá±ážáá»ááºáá¬ážáá±á¬ length semantics ááœáẠá¡ááœááºá¡á
á¬ážá¡ááá¯áẠáááºááŸááºáá¬ážáá±á¬ á¡áá»á¬ážááŸáááŒá±á¬ááºáž áá±áá»á¬á
á±áááºá áá±á¬áºáá¶á¡ááŸááºááẠááá¯ááá¯áá±á¬áááºááá¯ážááᯠááá·áºáá«á Oracle ááẠáááºááá¯ážááᯠáá±á¬áºáá¶á¡ááŸááºááá¯á· ááœááºáááºáá±ážáááºá
VARCHAR2 áá±áᬠá¡áá»áá¯ážá¡á
á¬áž
VARCHAR2 áá±áá¬á¡áá»áá¯ážá¡á
á¬ážááẠáá±áá¬áá±á·á
áºá¡áá¹ááá¬á¡á
á¯á¶á ááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ á¡ááŸááº-á¡áá¹ááá¬á
á¬ááŒá±á¬ááºážááᯠáááºááŸááºáááºá áááºááá±áá¬áá±á·á
áºááá¯áááºáá®ážáá±á¬á¡áá«ááœáẠáááºááẠáá±áá¬áá±á·á
áºáá¬ááºáá±á¬ááºáááºááŸááºááŸá¯ááᯠáááºááŸááºáá±ážáááºá Oracle ááẠVARCHAR2 áá±á¬áºáá¶ááœáẠá
á¬áá¯á¶ážáááºááá¯ážááᯠá¡ááœááºá¡ááœááºááá«áá² áááºáááºááŸááºáá¬ážááá²á·ááá¯á· áááºááá¯ážááẠáá±á¬áºáá¶áá¡ááŸááºáááºáááá¯á
á±áá² á¡ááá¡áá»ááááºážáááºážáá¬ážáááºá
NUMBER áá±áá¬á¡áá»áá¯ážá¡á
á¬áž
NUMBER áá±áá¬á¡áá»áá¯ážá¡á
á¬ážááẠáá¯áá¡ááŒáẠ1.0 x 10-130 á០1.0 x 10126 á¡áá 1.0 x 10126 ááá«áááºáá² áááááááºááá¯ážáá»á¬ážááŒáá·áº á¡ááŒá¯ááá±á¬ááŸáá·áº á¡ááŸá¯ááºáá¯á¶áá±ááááºážáá»á¬ážááᯠáá¯áá¡ááŒá
Ạááááºážáááºážáá¬ážáááºá áááºááá¯ážáááºááŒá®ážáá±á¬ ááá¯á·ááá¯áẠáá®áá»áŸááá·áº ááááºážáááºá¹áá»á¬á¡ááœáŸááºážááááºážáá
áºáá¯ááᯠáááºáááºááŸááºáá«áá 1 x 22 ááá¯á·áá±á¬áẠOracle ááẠerror áá
áºáá¯ááᯠááŒááºáá±ážáááºá NUMBER áááºááá¯ážáá
áºáá¯á
á®ááẠXNUMX á០XNUMX bytes ááá¯á¡ááºáááºá áááºážááá¯ááá·áºááœááºážá
ááºážá
á¬ážááŒááºážááŒáá·áº p ááẠáá±ážáá¬ážááá·áºáááºááá¯ážááááá»ááŸá¯ááŒá
áºááá·áº áá®ážááŒá¬ážááááºážáá±áá¬áááºááá¯áž NUMBER(p) á¡ááœáẠbytes á áá±á¬áºáá¶á¡ááœááºá¡á
á¬ážááᯠá¡á±á¬ááºáá«áá±á¬áºááŒá°áá¬ááŒáá·áº ááœááºáá»ááºááá¯ááºáááº- ROUND((á¡ááŸááº(p)+s)/2))+1 s ááẠáá¶áá«ááºá¡áá±á¬ááºážááŒá
áºáá»áŸáẠáá¯áááŸáá·áºáá®áá»áŸááẠá ááŸáá·áº s ááẠ1 ááŸáá·áº áá®áá»áŸáááºá
ááá¯á·á¡ááŒááºá Null áááºááá¯ážáá»á¬ážááᯠááááºážáááºážááŒááºážááá¯ááºáᬠá á¬ááœááºá á¬áááºážá០áá±á¬ááºáá¯ááºáá»ááºááᯠááŒáá·áºááŒáá«á áá¯á·á
null ááẠáá±á¬áºáá¶áá áºáá¯ááŸá áááºááá¯ážáá áºáá¯á áááŸáááŒááºáž ááŒá áºáááºá Null áá»á¬ážááẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬á á¡áááºááá ááá¯á·ááá¯áẠá¡áá¯á¶ážáááŒá¯ááá¯ááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±á¬áºááŒáááºá áá±áá¬áááºááá¯ážáá»á¬ážááŸááá±á¬ áá±á¬áºáá¶áá»á¬ážááŒá¬ážááœáẠááŒá¯ááºáá»áá«á áá±áá¬áá±á·á áºááœáẠNull áá»á¬ážááᯠááááºážáááºážáá¬ážáááºá á€ááá á¹á áá»á¬ážááœááºá áá±á¬áºáá¶áá¡ááŸáẠ(áá¯á) ááá¯ááááºážáááºážááẠ1 byte ááá¯á¡ááºáááºá ááááºá¡áááºážááŸá áá»ááºáá±á¬áºáá¶áá»á¬ážááẠnull ááŒá áºáá±ááŒá±á¬ááºáž á¡áááºážáá±á«ááºážáá±á«ááºážá¡áá áºá á¡áá»ááºááŒáá±á¬ááŒá±á¬áá·áº á¡áááºážáá áºáááºážááŸá null áá»á¬ážááẠááá¯ááŸá±á¬ááºááŸá¯áááá¯á¡ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áºá ááá¬ážáá áºáá¯ááá±á¬ááºáá¯á¶ážáá±á¬áºáá¶áá¯á¶ážáá¯ááẠnull ááŒá áºáá«áá ááá¯áá±á¬áºáá¶áá»á¬ážá¡ááœáẠáááºááá·áºáá±áá¬ááá¯áá»áŸ ááááºážáááºážáááºááá¯ááºáá«á
á€á¡áá»ááºá¡áááºááᯠá¡ááŒá±áá¶á áá»áœááºá¯ááºááá¯á·ááẠáá»áá¯ážááŒá±á¬ááºážáááºááŒááºááŸá¯ááᯠáááºáá±á¬ááºáá«áááºá áá±áá¬áá±á·á áºááẠAL32UTF8 áá¯ááºáá¶áá«ááºááᯠá¡áá¯á¶ážááŒá¯áááºáᯠáá»áœááºá¯ááºááá¯á· áá°ááá«áááºá á€áá¯ááºááŒá±á¬ááºážááŒááºážááœááºá áá¯ááŸá¬ážá á¬áá¯á¶ážáá»á¬ážááẠ2 bytes ááŸááááºá
1) A ááŸáá·áº Xá 'Y' á¡ááœááºááááºááá¯ážááẠ1 byte áá°áááºá á¡ááœáẠx 'D' ááááºááá¯ážááẠ2 bytes áá°áááºá
2) B ááŸáá·áº Yá b ááŸá 'Vasya' ááẠá
á¬áá¯á¶áž 10 áá¯á¶ážá¡áá space áá»á¬ážáá«ááŸááááºááŒá
áºááŒá®áž 14 bytes áá°áááºááŒá
áºááŒá®áž d ááœáẠ'Vasya' ááẠ8 bytes áá°áááºááŒá
áºáááºá
3) C ááŸáá·áº Ká á¡ááœááºááŸá
áºáá¯áá¯á¶ážááẠáááºááá¯áž NULL ááŸááááºá áááºážááá¯á·áá±á¬ááºááœáẠáááá¬áááºááŸá¬ážáá±á¬á¡ááœááºáá»á¬áž ááŸááá±áá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááẠ1 byte ááᯠááááºážááá¯ááºáá¬ážáááºá
4) C ááŸáá·áº Zá á¡ááœááºááŸá
áºáá¯á
áá¯á¶ážááẠáááºááá¯áž NULL ááŸááááºá ááá¯á·áá±á¬áº á¡ááœáẠZ ááẠááá¬ážááœáẠáá±á¬ááºáá¯á¶ážááŒá
áºáá±á¬ááŒá±á¬áá·áº áá±áá¬ááœáẠ(0 bytes) ááá°áá«á Field C ááẠ1 byte ááŸááááºá
5) K ááŸáá·áº Zá ááááºááá
á¹á
ááŸáá·áº áááºáá°áááºá K á¡ááœááºááŸá áááºááá¯ážááẠZ â 1 ááœáẠ0 byte ááŸááááºá
6) I ááŸáá·áº J. á
á¬ááœááºá
á¬áááºážá¡áá áááºááá¯ážááŸá
áºáá¯áá¯á¶ážááẠ2 bytes áá°áá«áááºá á
á¬ááœááºá
á¬áááºážááŸáá°áá¬ážáá±á¬ áá±á¬áºááŒá°áá¬ááᯠá¡áá¯á¶ážááŒá¯á á¡áá»á¬ážááᯠááœááºáá»ááºáááº- round((1+0)/2) +1=1+1=2á
7) J ááŸáá·áº Xá J á¡ááœááºááŸá áááºááá¯ážááẠ2 bytes áá°áááºááŒá
áºááŒá®áž X á¡ááœááºááŸá áááºááá¯ážááẠ2 bytes ááŒá¬áááºááŒá
áºáááºá
á á¯á á¯áá±á«ááºážá ááŸááºáááºáá±á¬ááœá±ážáá»ááºááŸá¯áá»á¬ážááŸá¬- C ááŸáá·áº Ká I ááŸáá·áº Já J ááŸáá·áº X ááŒá áºáááºá
T_I á¡ááœáŸááºážááááºážá á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááŸá¬ ááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº á¡áááºáááºážá
create table t (i integer);
insert into t select rownum from dual connect by level <= 10000;
create index t_i on t(i);
- áááºááááºážáá±á¬ááºááŸááááºá
- áá¬ááááºážáá±á¬ááºááŸááááºá
- áá±á¬ááºáá±á«ááºážáá»á¬ážá áœá¬
- áá±á¬ááºážááááºážáá±á¬ááºááŸááááºá
á¡ááœá±Oracle documentation (12.1 ááŸááá¯ážáá¬áž) á¡á-
B-tree á¡ááœáŸááºážá¡ááœááºá á¡ááœáŸááºážááááºážá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠá¡ááœáŸááºážáááºááá¯ážáá áºáá¯ááŸáá·áºáááºá ááºá á¡áááºážáá»á¬ážááá¯ááºááá¯ááºážááá¯ááºáá¬á¡á¯ááºá á¯ááœá²á·ááŸá¯ááᯠááá¯ááºážáá¬áááºá
ááœáŸááºážááááºážá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáá°á¡á¬áž á¡ááœáŸááºážá áááºááºáááºááŒááºáž ááá¯á·ááá¯áẠááá¬ážá¡ááŒáá·áºá¡á á¯á¶á áááºááºááẠá¡áá»áá¯á·áá±á¬áá±ážááœááºážáá»á¬ážá¡ááœáẠááá¯ááá¯áááá±á¬ááºááŸá¯ááŸááááŸá áá¯á¶ážááŒááºáá±ážáááºá) á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºáááºážáá±á¬á¡áá»ááºááẠáááá±á¬ááºáá±á¬á¡ááœáŸááºážá áááºááºáá áºáá¯ááᯠááœáŸááºááŒáááºá
ááá¬ážáá áºáá¯ááŸá áá¯ááºááœááºá¡áá±á¡ááœááºááŸáá·áº áá®ážá ááºáá±á¬ á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠá¡áááºážáá»á¬ážááᯠá¡ááœáŸááºážááá¯ááºááŒáá·áº ááá¬ážááœááºáá»á¬ážá¡ááœááºáž áá¯ááºááá¯ááºážááá¯ááºáá¬á¡á á á®áá¬ážááŒááºážááᯠááœáŸááºááŒáááºá áá±áá¬áá±á·á áºááẠááá¬ážá¡ááŒáá·áºá¡á á¯á¶ááᯠá áááºáááºá á áºáá±ážáá«áá áááºážááá¯á·ááᯠá¡ááœáŸááºážáá®ážááŒáá·áºá á®áá¬ážáá±á¬ disk ááœáẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº áá±áá¬áá±á·á áºááẠá¡áááºážáá»á¬ážááᯠááŒááºáááºááá°ááẠá¡áá¬ážá¡áá¬ááŸááááºá á¡áááºážá¡áá±á¡ááœááºááŸáá·áºáá®ážá ááºáá±á¬ á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠá¡ááœáŸááºážáá®ážááŸáá·áºáááºá ááºáá±á¬ áá±áá¬áá±á·á áºááá±á¬ááºáá»á¬ážáá áºáá»áŸá±á¬ááºááœáẠá¡áááºážáá»á¬ážááᯠáá»áááºážáá»áááºážááŒáá·áºáá»á²áá¬ážááŒá±á¬ááºáž ááœáŸááºááŒáááºá áá±áá¬áá±á·á áºááẠááá¬ážá¡ááŒáá·áºá¡á á¯á¶ááᯠá áááºááºáááºáá«áá áá±áá¬áá±á·á áºááẠá€á¡ááœáŸááºážáá®ážááŒáá·áº á á®áá¬ážáá±á¬ á¡áááºážáá»á¬ážááᯠááŒááºáááºááá°áááºááá¯ááºáá«á
á€ááá á¹á ááœááºá áá±áá¬ááᯠá á¶ááá°áá¬ááŒááŒá®áž á á®áá¬ážáá±á¬ááŒá±á¬áá·áº á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠááá¬ážááŸá ááááºážááá¯ááºáá¬ážáá±á¬ áá¯ááºááœááºá¡áá±á¡ááœááºááŸáá·áº áá®áá»áŸ ááá¯á·ááá¯áẠáá®ážá ááºáááºááŒá áºáááºá á á¶ááá±á¬ááºá¡ááœááºá¡á á¬áž 8 áá®ááá¯ááá¯ááºá¡ááœááºá áá»ááºážááŒá±á¬ááºážáá±á¬ áá¶áá«ááºáááºááá¯ážáá»á¬áž áá áºáá±á¬ááºááá·áºááẠááá±á¬ááºáá áºáá¯ááœáẠá¡á¶áááºááœááºáá»ááŒá áºáááºáᯠáááºáá»áŸá±á¬áºááá·áºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº ááá±á¬ááºá¡áá±á¡ááœááºááŸáá·áº ááááºá¡áá±ááŒáá·áºá á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯ááºá¡áá»ááºááẠááŒá áºáááá·áºáááºá áááºááááºážáá±á¬ááº.
N á áááºááá·áºáááºááá¯ážáá»á¬ážááœáẠá¡á±á¬ááºáá« script ááᯠá á¶áááºáááºáá»á¬ážááŒáá·áº áá¯á¶ááŸááºáá±áá¬áá±á·á áºáá áºáá¯ááœáẠá¡á±á¬ááºááŒááºá áœá¬áá¯ááºáá±á¬ááºááá¯ááºáááºáááºážá
create table t (
a varchar2(N char),
b varchar2(N char),
c varchar2(N char),
d varchar2(N char));
create index t_i on t (a, b, c, d);
- 100
- 200
- 400
- 800
- 1600
- 3200
- 6400
á¡ááœá±Oracle documentation (11.2 ááŸááá¯ážáá¬áž) á¡á-
Logical Database ááá·áºáááºáá»ááºáá»á¬áž
á¡áá»ááº
ááá·áºáááºá¡áá»áá¯ážá¡á
á¬áž
áááºááá¯ážááá·áºáááº
á¡ááœáŸááºážááááºáž
á¡ááœáŸááºážááŒá¯áá¬ážáá±á¬ áá±á¬áºáᶠá
á¯á
á¯áá±á«ááºáž á¡ááœááºá¡á
á¬áž
áá±áá¬áá±á·á
áºááá±á¬ááºááá¯ááºá 75% ááẠá¡áá¯ááºá¡áá»áá¯á·áá±á«áºáá¬áááºá
ááá¯á·ááŒá±á¬áá·áºá á¡ááœáŸááºážááŒá¯áá±á¬áºáá¶áá»á¬ážá á á¯á á¯áá±á«ááºážá¡ááœááºá¡á á¬ážááẠ6Kb ááẠáááá¯ááá·áºáá«á ááœá±ážáá»ááºáá¬ážáá±á¬ á¡ááŒá±áá¶áá¯ááºáá¶áá«ááºáá±á«áºááœááºáá°áááºáá«áááºá AL32UTF8 áá¯ááºááŒá±á¬ááºážááŒááºážá¡ááœááºá á á¬áá¯á¶ážáá áºáá¯á¶ážááẠá¡áá»á¬ážáá¯á¶áž 4 bytes ááᯠááááºážááá¯ááºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº á¡ááá¯ážáá¯á¶ážá¡ááŒá±á¡áá±ááœáẠá á¬áá¯á¶ážáá± 6 ááá·áºááẠ1500 áá®ááá¯ááá¯ááºááŸáá·áº á¡á¶ááá¯ááºááŒá áºáááá·áºáááºá ááá¯á·ááŒá±á¬áá·áºá Oracle ááẠN = 400 ááœáẠá¡ááœáŸááºážáááºáá®ážááŒááºážááᯠááœáá·áºáááŒá¯áá« (á¡ááá¯ážáá¯á¶ážáá±á¬á·á¡ááŸááºááŸá¬ á á¬áá¯á¶ážáá± 1600 * 4 bytes + rowid length ááŒá áºáá±á¬á¡áá«)á N = 200 (á¡á±á¬ááº) á¡ááœáŸááºážááá¯áááºáá®ážááŒááºážááẠááŒá¿áá¬áááŸááá² á¡áá¯ááºááŒá áºáááá·áºáááºá
APPEND á¡ááááºá¡ááŒáœááºáá«ááŸááá±á¬ INSERT á¡á±á¬áºááá±áá¬ááẠáá±áá¬ááᯠááá¯ááºááá¯ááºáá¯ááºááœáẠáááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá á¡á áá»áá¯ážááœá²áá¬ážáá±á¬ ááá¬ážááœáẠáááºážááᯠá¡áá¯á¶ážáá»áá«á áááºááá¯á·ááŒá áºáááºáááºážá
- áá±áá¬ááᯠááá¯ááºááá¯ááºáá¯ááºááœáẠáááºáááºááŒá áºááŒá®ážá á¡á áá»áá¯ážááẠáá»áŸá±á¬áºááá·áºáá¬ážááá·áºá¡ááá¯ááºáž á¡áá¯ááºáá¯ááºáááºááŒá áºáááºá
- áá±áá¬ááᯠááá¯ááºááá¯ááºáá¯ááºááœáẠáááºáááá·áºáááºá ááá¯á·áá±á¬áº á¡á áá»áá¯ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºááá¯ááºáá«á
- áá±áá¬ááᯠááá¬ážááá¯ážáá»áá¯ááºááœáẠáááºáááºááŒá áºááŒá®ážá á¡á áá»áá¯ážááŸá¯ááŸá¬ áááºážáá²á·ááá¯á· á¡áá¯ááºáá¯ááºáááºááŒá áºáááºá
- áá±áá¬ááᯠááá¬ážááá¯ážáá»áá¯ááºááœáẠáááºáááá·áºáááºá ááá¯á·áá±á¬áº á¡á áá»áá¯ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºááá¯ááºáá«á
- áá±áá¬ááᯠáááºáááºááá¯ááºáá«á á¡ááŸá¬ážáá áºáá¯ááᯠááŸááºáááºážáááºáá«áááºá
á¡ááœá±á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá á€áááºááŸá¬ áá¯áá¹áááá±áá áá±ážááœááºážáá áºáá¯ááŒá áºáááºá á¡ááŒá±ááŸááºááá¯ááŸá¬áááºá áá»áœááºá¯ááºááẠá¡á±á¬ááºáá« áá»áá¯ážááŒá±á¬ááºážáááºááŒááºááŒááºážáá¯á¶á á¶ááᯠá¡ááŒá¶ááŒá¯ááá¯áááº-
- ááá¯ááºááá¯ááºáá¯ááºááœáẠááá·áºááœááºážááŒááºážááᯠááŒááºááŸá¯ááºážááŒáá·áºáá±áá»á¬á á±ááá·áº SQL á¡ááºáá»ááºááᯠáá»á±á¬áºááŒááºáᬠáá±áá¬ááááºááá¯á·ááŒááºážááᯠááá¯ááºááá¯ááºááœá²á·á ááºážááŒááºážááŒáá·áº áá¯ááºáá±á¬ááºáááºá ááá¯á·ááŒá±á¬áá·áºá trigger á execution ááá¯áá±áá»á¬á á±áááºááŸá¬ á¡ááœááºáááºáá²áááºá áááŒá áºááá¯ááºáá»áŸááºá áááºážááœááºááá·áºááœááºážááŒááºážá¡á¬áž á¡ááœááºááŸá±ážááœá±ážáá±áá±ážáá±á¬ááŒá±á¬áá·áº áááºážááœáẠáááºááá·áºá¡áá»ááºá០áááŸááá«á
- á¡á áá»áá¯ážááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠáá»ááºááœááºáá«á ááá¬ážááŸááá±áá¬ááẠáá°áá®áá«áá áá±áá¬áá±á·á áºáá áºáá¯áá¯á¶ážá á¡ááŒá±á¡áá± (á¡ááŒá¬ážááá¬ážáá»á¬áž) ááẠá€áá±áá¬ááá·áºááœááºážááá·áºáá¯ááºáá±á«áºááœáẠáá°áááºáááá·áºáááºáá°áá±á¬á¡áá»ááºááᯠáŠážáááºááœá¬ážáááºááŒá áºáááºá áááºážááẠáá±áá¬ááá¯ááºáá¬ááŸá¯ááᯠáááááá¬áᬠáá»ááºáá®ážáá áºáááºááŒá áºááŒá®áž áá¯ááºáá¯ááºáá±ážááœáẠááŒá±ááŸááºážáá»ááºáá áºáá¯á¡ááŒá Ạá¡áá¯á¶ážáá»ááááá«á
- áá±á¬ááºážááá¯áá¬ážááá·áº áá¯ááºáá±á¬ááºáá»ááºááᯠááá¯ááºáá±á¬ááºááá¯ááºááŸá¯ááᯠáá±áá¯áá»á¡á¬ážááŒáá·áº á¡ááŸá¬ážá¡ááœááºážáá áºáá¯á¡ááŒá ẠáááºááŸááºáááºá ááá¯á·áá±á¬áº á€áá±áá¬ááœáẠAPPEND ááẠá¡ááááºá¡ááŒáœááºáá áºáá¯ááŒá áºááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážááá·áºááŒá®áž á¡ááááºá¡ááŒáœááºáá»á¬ážá áá±áá°áá»áá¯áá¹ááááŸá¬ ááŒá áºááá¯ááºáá«á áááºážááá¯á·ááᯠááá·áºááœááºážá ááºážá á¬ážáááºá ááá¯á·áá±á¬áº ááá¯ááºáá«áá á¡á±á¬áºááá±áá¬ááẠá¡ááááºá¡ááŒáœááºááᯠááá·áºááœááºážá ááºážá á¬ážááŒááºážáááŸááá² áá¯ááºáá±á¬ááºááœá¬ážáááºááŒá áºáááºá
áá«ááᯠáá»áŸá±á¬áºááá·áºáá¬ážáá²á· á¡ááŒá±á áá±áá¬ááᯠáá¯á¶ááŸáẠ(SQL) áá¯ááºááœáẠáááºáááºááŒá áºááŒá®ážá ááááºá áá®ážááœáá·áºááœá¬ážáááºááŒá áºáááºá
Oracle documentation (8.04 ááŸááá¯ážáá¬áž) á¡á-
ááá·áºáááºáá»ááºáá»á¬ážááᯠáá»áá¯ážáá±á¬ááºááŸá¯áá»á¬ážááẠááááá±ážáá»ááºáá»á¬áž ááá¯á·ááá¯áẠá¡ááŸá¬ážá¡ááœááºáž áááºáá±á·áá»áºáá»á¬ážááá«áá² ááá¬ážááá¯ážáá» ááá·áºááœááºážááá·áºáááºážááŒá±á¬ááºážááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºááŒááºáá»ááºá¡á¬áž á¡ááŸááºá
ááºá¡ááá¯ááºáž áá¯ááºáá±á¬ááºá
á±áááºááŒá
áºáááºá ááŒáœááºážáá»ááºáá
áºáá¯ááẠááœá±áá±ážááœá±áá°áá
áºáá¯ááœáẠáá°áá®áá±á¬ááá¬ážáá
áºáá¯ááᯠáá
áºááŒáááºáááºááá¯ááááºáá±á¬ááºááŒáá·áºááŸá¯ááŒááºážá¡áá±á«áº ááá·áºáááºáá»ááºáá
áºáá¯ááŒá
áºááŒá®áž á¡ááŸá¬ážá¡ááœááºážáááºáá±á·ááºá»áá»á¬ážááŒá
áºá
á±ááá¯ááºáááºá
á¥ááá¬á¡á¬ážááŒáá·áºá ááá¬ážáá±á«áºááœáẠá¡á
áá»áá¯ážááŸá¯áá»á¬áž ááá¯á·ááá¯áẠááá¯ážáá¬ážááŸá¯ááá¯ááºáᬠááá¯ááºáá¬ááŸá¯ááŸááá±áá«áá áááºááẠááá¯ááºááá¯ááº-load INSERT (serial ááá¯á·ááá¯áẠparallel) ááŸáá·áº PARALLEL á¡ááááºá¡ááŒáœáẠááá¯á·ááá¯áẠá¡ááá¯ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááẠááŒáá¯ážá
á¬ážááá·áºá¡áá« APPEND á¡ááááºá¡ááŒáœááºááᯠáá»á
áºáá»á°ááŸá¯áá«áááºá
á¡á±á¬ááºáá« script ááá¯áá¯ááºáá±á¬ááºáá±á¬á¡áá« áá¬ááŒá áºááœá¬ážááá²á
create table t(i integer not null primary key, j integer references t);
create trigger t_a_i after insert on t for each row
declare
pragma autonomous_transaction;
begin
insert into t values (:new.i + 1, :new.i);
commit;
end;
/
insert into t values (1, null);
- á¡á±á¬ááºááŒááºá áœá¬ááŒá®ážááŒá±á¬ááºááŒááºážá
- á¡áá¬ážá¡ááá¯á¡ááŸá¬ážá¡ááœááºážááŒá±á¬áá·áº áá»ááºááœááº
- á¡ááŸá¬ážá¡ááœááºáž- ááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áº ááœáŸá²ááŒá±á¬ááºážááŸá¯ áááŸááºáááºáá«á
- á¡áá»á¬ážáá¯á¶ážáá±á«áºááá¯ááŸá¯ nesting ááá¯áá»á±á¬áºááœááºááŒááºážááŸáá·áºáááºá ááºáá±á¬á¡ááŸá¬áž
- Foreign Key Violation Error
- áá±á¬á·ááá±á¬ááºáá»á¬ážááŸáá·áº áááºáááºáá±á¬ á¡ááŸá¬áž
á¡ááœá±Table ááŸáá·áº trigger ááᯠá¡áá±á¬áºáá±áž ááŸááºáááºá áœá¬ áááºáá®ážáá¬ážááŒá®áž á€áá¯ááºáá±á¬ááºáá»ááºááẠááŒá¿áá¬áá»á¬áž áááŒá áºáá±á«áºá á±ááá·áºáá«á á¡á áá»áá¯ážááŸá¯áá áºáá¯ááœáẠááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºáááœá±áá±ážááœá±áá°áá»á¬ážááá¯áááºáž ááœáá·áºááŒá¯áá¬ážáá«áááºá ááá¯ááºáá«á á¥ááá¬á¡á¬ážááŒáá·áº áá áºáá¯ááºááŒááºážáá»áá¯áž áááŒá áºááá¯ááºáá«á
ááááááºážááᯠááá·áºááœááºážááŒá®ážáá±á¬ááºá á¡á±á¬ááºááŒááºáá±á¬ trigger firing ááẠáá¯áááá¡áááºážááᯠááá·áºááœááºážááááºááŒá áºááŒá®ážá áá±á«áºááá¯ááŸá¯áá»á¬ážá á¡áá»á¬ážáá¯á¶áž nesting ááá¯áá»á±á¬áºááœááºááœá¬ážáá±á¬ááŒá±á¬áá·áº ááŒá±ááŒá¬áá»ááºáá¡á±á¬ááºááŒááºáá®á¡áá trigger ááᯠáááºáá¶áá áºáááºá á±áᬠááááá¡áááºážááᯠáááºáá¶ááá·áºááœááºážá á±áááºááŒá áºáááºá ááá¯á·áá±á¬áºá áá±á¬ááºááẠááááºááœá±á·áá±á¬á¡áá»ááºááŸá¬ áá«áááºáá¬áááºá á¡á áá»áá¯ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáá»áááºááœááºá ááááá¯á¶áž ááá·áºááœááºážáá¬ážáá±á¬ ááŸááºáááºážá¡ááœáẠcommit ááẠáááŒá®ážááŒááºáá±ážáá«á ááá¯á·ááŒá±á¬áá·áºá ááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºááŸááá±á¬ ááœá±áá±ážááœá±áá°áá áºáá¯ááœáẠáá¯ááºáá±á¬ááºáá±ááá·áº á¡á áá»áá¯ážáá áºáá¯ááẠááá¯ááºáá¶ááŒá¬ážáá±á¬á·ááᯠááá»á°ážááœááºááá±ážáá±á¬ ááŸááºáááºážáá áºáá¯áá®ááá¯á· ááá¯ááºáá¶ááŒá¬ážáá±á¬á·ááᯠáááºááœáŸááºážáá±á¬ á¡áááºážáá áºáá¯ááᯠááá¬ážáá²ááá¯á· ááá·áºááœááºážááẠááŒáá¯ážá á¬ážáááºá áááºážááẠá á±á¬áá·áºááá¯ááºážááŒááºážááᯠááŒá áºáá±á«áºá á±ááẠ(áá±áá¬ááá·áºááœááºážááá¯ááºáááºááá¯áááºááᯠááááŸáááẠáááºáááœá±áá±ážááœá±áá°ááᯠáááááŒá¯áááºá¡ááœáẠááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºáááœá±áá±ážááœá±áá°ááᯠá á±á¬áá·áºááá¯ááºážáááº) ááŸáá·áº áá áºáá»áááºáááºážááœááºááẠá¡áááááœá±áá±ážááœá±áá°ááẠá¡á áá»áá¯ážááŒá®ážáá±á¬áẠááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºáááœá±áá±ážááœá±áá°ááᯠáááºáááºáá¯ááºáá±á¬ááºááẠá á±á¬áá·áºááá¯ááºážáá±áá«áááºá áá±á¬á·áááºááŸá¯áá áºáᯠááŒá áºáá±á«áºááŒá®áž ááááºá¡áá±ááŒáá·áº áá±á¬á·áááºááŸá¯áá»á¬ážááŸáá·áº áááºáááºááá·áº á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒá±á¬áá·áº ááá¯ááºááá¯ááºá¡á¯ááºáá»á¯ááºááœáá·áºá ááœá±áá±ážááœá±áá°ááᯠáááºáá»ááºááá¯ááºáááº.
á
á¬áááºážááœááºážá¡áá¯á¶ážááŒá¯áá°áá»á¬ážáᬠá
á
áºáááºážááœáẠáá«áááºááá¯ááºáá«áááºá
áááºáá²á·áá¬áá¬áž?
-
áááºááŸá áºáá»á±á¬ááºážááá¯áá² áá»áœááºáá±á¬áº áá»ááºáá»ááºážáá² á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºááŸááºáááºááẠáá¯á¶ážááŒááºáá²á·áááºá
-
á¡ááŸááºáá±á¬á· ááá¯ááºáá°ážá áá±ážááœááºážááŸá áºáá¯á¡ááœáẠáá«ááŸá¬ážáá²á·áááºá
-
áá áºáááºááᯠááŸááºááŸááºáááºááẠááŒá±ááŸááºážáá²á·áááºá
-
á¡âááŒá±ááᯠááŸá áºâáá«âáá±á¬ááºââáá±á¬ááºââááœá±ážááŒáá·áºâáááááºâ!
-
comment ááŸá¬áá±ážáá«á·áááº
á¡áá¯á¶ážááŒá¯áá° 14 áŠáž áá²áá±ážáá²á·áááºá á¡áá¯á¶ážááŒá¯áá° 10 ááŸá±á¬ááºáá±áá²á·áá«áááºá
source: www.habr.com