ื‘ืขืงื‘ื•ืช Highload++ Siberia 2019 - 8 ืžืฉื™ืžื•ืช ื‘-Oracle

ื”ื™ื™!

ื‘ืชืืจื™ื›ื™ื 24-25 ื‘ื™ื•ื ื™ ื”ืชืงื™ื™ื ื›ื ืก Highload++ Siberia 2019 ื‘ื ื•ื‘ื•ืกื™ื‘ื™ืจืกืง. ื’ื ื”ื—ื‘ืจ'ื” ืฉืœื ื• ื”ื™ื• ืฉื ืœื”ื’ื™ืฉ ืชืœื•ื ื” "ืžืื’ืจื™ ืžื™ื“ืข ืฉืœ ืื•ืจืงืœ (CDB/PDB) ื•ื”ืฉื™ืžื•ืฉ ื”ืžืขืฉื™ ืฉืœื”ื ืœืคื™ืชื•ื— ืชื•ื›ื ื”", ื ืคืจืกื ื’ืจืกืช ื˜ืงืกื˜ ืžืขื˜ ืžืื•ื—ืจ ื™ื•ืชืจ. ื”ื™ื” ืžื’ื ื™ื‘, ืชื•ื“ื” ืื•ืœื’ื‘ื•ื ื™ืŸ ืœืžืขืŸ ื”ืืจื’ื•ืŸ, ื›ืžื• ื’ื ืœื›ืœ ืžื™ ืฉื”ื’ื™ืข.

ื‘ืขืงื‘ื•ืช Highload++ Siberia 2019 - 8 ืžืฉื™ืžื•ืช ื‘-Oracle
ื‘ืคื•ืกื˜ ื”ื–ื”, ื‘ืจืฆื•ื ื ื• ืœืฉืชืฃ ืืชื›ื ื‘ื‘ืขื™ื•ืช ืฉื”ื™ื• ืœื ื• ื‘ื“ื•ื›ืŸ ืฉืœื ื• ื›ื“ื™ ืฉืชื•ื›ืœื• ืœื‘ื“ื•ืง ืืช ื”ื™ื“ืข ืฉืœื›ื ื‘-Oracle. ืžืชื—ืช ืœื—ื™ืชื•ืš 8 ื‘ืขื™ื•ืช, ืืคืฉืจื•ื™ื•ืช ืชืฉื•ื‘ื” ื•ื”ืกื‘ืจ.

ืžื”ื• ืขืจืš ื”ืจืฆืฃ ื”ืžืงืกื™ืžืœื™ ืฉื ืจืื” ื›ืชื•ืฆืื” ืžื‘ื™ืฆื•ืข ื”ืกืงืจื™ืคื˜ ื”ื‘ื?

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
  • ืœื, ืชื”ื™ื” ืฉื’ื™ืื”

ืชืฉื•ื‘ื”ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-8.1.6):
ื‘ืชื•ืš ืžืฉืคื˜ SQL ื™ื—ื™ื“, ืื•ืจืงืœ ืชื’ื“ื™ืœ ืืช ื”ืจืฆืฃ ืจืง ืคืขื ืื—ืช ื‘ื›ืœ ืฉื•ืจื”. ืื ื”ืฆื”ืจื” ืžื›ื™ืœื” ื™ื•ืชืจ ืžื”ืคื ื™ื” ืื—ืช ืœ-NEXTVAL ืขื‘ื•ืจ ืจืฆืฃ, ืื•ืจืงืœ ืžื’ื“ื™ืœื” ืืช ื”ืจืฆืฃ ืคืขื ืื—ืช ื•ืžื—ื–ื™ืจื” ืืช ืื•ืชื• ื”ืขืจืš ืขื‘ื•ืจ ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ NEXTVAL. ืื ื”ืฆื”ืจื” ืžื›ื™ืœื” ื”ืคื ื™ื•ืช ื’ื ืœ-CURRVAL ื•ื’ื ืœ-NEXTVAL, ืื•ืจืงืœ ืžื’ื“ื™ืœื” ืืช ื”ืจืฆืฃ ื•ืžื—ื–ื™ืจื” ืืช ืื•ืชื• ื”ืขืจืš ื’ื ืœ-CURRVAL ื•ื’ื ืœ-NEXTVAL ืœืœื ืงืฉืจ ืœืกื“ืจ ืฉืœื”ื ื‘ืชื•ืš ื”ื”ืฆื”ืจื”.

ื›ืš, ื”ืขืจืš ื”ืžืงืกื™ืžืœื™ ื™ืชืื™ื ืœืžืกืคืจ ื”ืฉื•ืจื•ืช, ื›ืœื•ืžืจ 5.

ื›ืžื” ืฉื•ืจื•ืช ื™ื”ื™ื• ื‘ื˜ื‘ืœื” ื›ืชื•ืฆืื” ืžื”ืคืขืœืช ื”ืกืงืจื™ืคื˜ ื”ื‘ื?

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

ืชืฉื•ื‘ื”ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-11.2):

ืœืคื ื™ ื‘ื™ืฆื•ืข ืžืฉืคื˜ SQL ื›ืœืฉื”ื•, โ€‹โ€‹ืื•ืจืงืœ ืžืกืžื ืช ื ืงื•ื“ืช ืฉืžื™ืจื” ืžืจื•ืžื–ืช (ืœื ื–ืžื™ื ื” ืขื‘ื•ืจืš). ืœืื—ืจ ืžื›ืŸ, ืื ื”ื”ืฆื”ืจื” ื ื›ืฉืœืช, ืื•ืจืงืœ ืžื—ื–ื™ืจื” ืื•ืชื” ืื•ื˜ื•ืžื˜ื™ืช ื•ืžื—ื–ื™ืจื” ืืช ืงื•ื“ ื”ืฉื’ื™ืื” ื”ืจืœื•ื•ื ื˜ื™ ืœ- SQLCODE ื‘- SQLCA. ืœื“ื•ื’ืžื”, ืื ืžืฉืคื˜ INSERT ื’ื•ืจื ืœืฉื’ื™ืื” ืขืœ ื™ื“ื™ ื ื™ืกื™ื•ืŸ ืœื”ื›ื ื™ืก ืขืจืš ื›ืคื•ืœ ื‘ืื™ื ื“ืงืก ื™ื™ื—ื•ื“ื™, ื”ื”ืฆื”ืจื” ืžื‘ื•ื˜ืœืช.

ื’ื ื”ืชืงืฉืจื•ืช ืœ-HP ืžื”ืœืงื•ื— ื ื—ืฉื‘ืช ื•ืžืขื•ื‘ื“ืช ื›ื”ืฆื”ืจื” ืื—ืช. ืœืคื™ื›ืš, ื”ืฉื™ื—ื” ื”ืจืืฉื•ื ื” ืฉืœ HP ืžืกืชื™ื™ืžืช ื‘ื”ืฆืœื—ื”, ืœืื—ืจ ืฉื”ื•ื›ื ืกื” ืฉืœื•ืฉ ืจืฉื•ืžื•ืช; ื”ืฉื™ื—ื” ื”ืฉื ื™ื™ื” ืฉืœ HP ืžืกืชื™ื™ืžืช ื‘ืฉื’ื™ืื” ื•ืžื—ื–ื™ืจื” ืœืื—ื•ืจ ืืช ื”ืจืฉื•ืžื” ื”ืจื‘ื™ืขื™ืช ืฉื”ืฆืœื™ื—ื” ืœื”ื›ื ื™ืก; ื”ืฉื™ื—ื” ื”ืฉืœื™ืฉื™ืช ื ื›ืฉืœื”, ื•ื™ืฉ ืฉืœื•ืฉื” ืจืฉื•ืžื•ืช ื‘ื˜ื‘ืœื”.

ื›ืžื” ืฉื•ืจื•ืช ื™ื”ื™ื• ื‘ื˜ื‘ืœื” ื›ืชื•ืฆืื” ืžื”ืคืขืœืช ื”ืกืงืจื™ืคื˜ ื”ื‘ื?

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

ืชืฉื•ื‘ื”ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-11.2):

ืื™ืœื•ืฅ ื‘ื“ื™ืงื” ืžืืคืฉืจ ืœืš ืœืฆื™ื™ืŸ ืชื ืื™ ืฉื›ืœ ืฉื•ืจื” ื‘ื˜ื‘ืœื” ื—ื™ื™ื‘ืช ืœืขืžื•ื“ ื‘ื•. ื›ื“ื™ ืœืขืžื•ื“ ื‘ืื™ืœื•ืฅ, ื›ืœ ืฉื•ืจื” ื‘ื˜ื‘ืœื” ื—ื™ื™ื‘ืช ืœื”ืคื•ืš ืืช ื”ืชื ืื™ ืœ-TRUE ืื• ืœื ื™ื“ื•ืข (ื‘ืฉืœ ืจื™ืง). ื›ืืฉืจ ืื•ืจืงืœ ืžืขืจื™ื›ื” ืชื ืื™ ืื™ืœื•ืฅ ื‘ื“ื™ืงื” ืขื‘ื•ืจ ืฉื•ืจื” ืžืกื•ื™ืžืช, ื›ืœ ืฉืžื•ืช ื”ืขืžื•ื“ื•ืช ื‘ืชื ืื™ ืžืชื™ื™ื—ืกื™ื ืœืขืจื›ื™ ื”ืขืžื•ื“ื•ืช ื‘ืื•ืชื” ืฉื•ืจื”.

ืœืคื™ื›ืš, ื”ืขืจืš 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, 'ะ”', 'ะ’ะฐัั');

  • ื' ื•-X
  • B ื•-Y
  • C ื•-K
  • C ื•-Z
  • K ื•-Z
  • ืื ื™ ื•ื’'ื™ื™
  • J ื•-X
  • ื”ื›ืœ ืžื•ืคื™ืข ื‘ืจืฉื™ืžื”

ืชืฉื•ื‘ื”ืœื”ืœืŸ ืงื˜ืขื™ื ืžื”ืชื™ืขื•ื“ (12.1.0.2) ืขืœ ืื—ืกื•ืŸ ื ืชื•ื ื™ื ืžืกื•ื’ื™ื ืฉื•ื ื™ื ื‘ืื•ืจืงืœ.

ืกื•ื’ ื ืชื•ื ื™ื CHAR
ืกื•ื’ ื”ื ืชื•ื ื™ื CHAR ืžืฆื™ื™ืŸ ืžื—ืจื•ื–ืช ืชื•ื•ื™ื ื‘ืื•ืจืš ืงื‘ื•ืข ื‘ืขืจื›ืช ื”ืชื•ื•ื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื. ืืชื” ืžืฆื™ื™ืŸ ืืช ืขืจื›ืช ื”ืชื•ื•ื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืขืช ื™ืฆื™ืจืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš. ืื•ืจืงืœ ืžื‘ื˜ื™ื—ื” ืฉืœื›ืœ ื”ืขืจื›ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืขืžื•ื“ืช CHAR ื™ืฉ ืืช ื”ืื•ืจืš ืฉืฆื•ื™ืŸ ืœืคื™ ื’ื•ื“ืœ ื‘ืกืžื ื˜ื™ืงื” ืฉืœ ื”ืื•ืจืš ืฉื ื‘ื—ืจ. ืื ืืชื” ืžื•ืกื™ืฃ ืขืจืš ืงืฆืจ ืžืื•ืจืš ื”ืขืžื•ื“ื”, ืื– ืื•ืจืงืœ ืžืจื—ื™ื‘ื” ืืช ื”ืขืจืš ืœืื•ืจืš ื”ืขืžื•ื“ื”.

ืกื•ื’ ื ืชื•ื ื™ื VARCHAR2
ืกื•ื’ ื”ื ืชื•ื ื™ื VARCHAR2 ืžืฆื™ื™ืŸ ืžื—ืจื•ื–ืช ืชื•ื•ื™ื ื‘ืื•ืจืš ืžืฉืชื ื” ื‘ืขืจื›ืช ื”ืชื•ื•ื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื. ืืชื” ืžืฆื™ื™ืŸ ืืช ืขืจื›ืช ื”ืชื•ื•ื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืขืช ื™ืฆื™ืจืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš. ืื•ืจืงืœ ืžืื—ืกื ืช ืขืจืš ืชื• ื‘ืขืžื•ื“ืช VARCHAR2 ื‘ื“ื™ื•ืง ื›ืคื™ ืฉืืชื” ืžืฆื™ื™ืŸ ืื•ืชื•, ืœืœื ืจื™ืคื•ื“ ืจื™ืง, ื‘ืชื ืื™ ืฉื”ืขืจืš ืื™ื ื• ื—ื•ืจื’ ืžืื•ืจืš ื”ืขืžื•ื“ื”.

NUMBER ืกื•ื’ ื ืชื•ื ื™ื
ืกื•ื’ ื”ื ืชื•ื ื™ื NUMBER ืžืื—ืกืŸ ืžืกืคืจื™ื ืงื‘ื•ืขื™ื ืืคืก ื•ื›ืŸ ื—ื™ื•ื‘ื™ ื•ืฉืœื™ืœื™ ืขื ืขืจื›ื™ื ืžื•ื—ืœื˜ื™ื ืž-1.0 x 10-130 ื•ืขื“ ืืš ืœื ื›ื•ืœืœ 1.0 x 10126. ืื ืชืฆื™ื™ืŸ ื‘ื™ื˜ื•ื™ ืืจื™ืชืžื˜ื™ ืฉืœืขืจืš ืฉืœื• ื™ืฉ ืขืจืš ืžื•ื—ืœื˜ ื”ื’ื“ื•ืœ ืื• ืฉื•ื•ื” ืœ- 1.0 x 10126, ื•ืื– ืื•ืจืงืœ ืžื—ื–ื™ืจื” ืฉื’ื™ืื”. ื›ืœ ืขืจืš NUMBER ื“ื•ืจืฉ ื‘ื™ืŸ 1 ืœ-22 ื‘ืชื™ื. ืื ืœื•ืงื—ื™ื ื–ืืช ื‘ื—ืฉื‘ื•ืŸ, ื ื™ืชืŸ ืœื—ืฉื‘ ืืช ื’ื•ื“ืœ ื”ืขืžื•ื“ื” ื‘ื‘ืชื™ื ืขื‘ื•ืจ ืขืจืš ื ืชื•ื ื™ื ืžืกืคืจื™ ืžืกื•ื™ื NUMBER(p), ื›ืืฉืจ p ื”ื•ื ื”ื“ื™ื•ืง ืฉืœ ืขืจืš ื ืชื•ืŸ, ื‘ืืžืฆืขื•ืช ื”ื ื•ืกื—ื” ื”ื‘ืื”: ROUND((length(p)+s)/2))+1 ื›ืืฉืจ s ืฉื•ื•ื” ืœืืคืก ืื ื”ืžืกืคืจ ื—ื™ื•ื‘ื™, ื•-s ืฉื•ื•ื” 1 ืื ื”ืžืกืคืจ ืฉืœื™ืœื™.

ื‘ื ื•ืกืฃ, ื‘ื•ืื• ื ื™ืงื— ืงื˜ืข ืžื”ืชื™ืขื•ื“ ืขืœ ืื—ืกื•ืŸ ืขืจื›ื™ Null.

null ื”ื•ื ื”ื™ืขื“ืจ ืขืจืš ื‘ืขืžื•ื“ื”. ืืคืก ืžืฆื™ื™ืŸ ื ืชื•ื ื™ื ื—ืกืจื™ื, ืœื ื™ื“ื•ืขื™ื ืื• ืœื ื™ืฉื™ืžื™ื. ืืคืกื™ื ืžืื•ื—ืกื ื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืื ื”ื ื ื•ืคืœื™ื ื‘ื™ืŸ ืขืžื•ื“ื•ืช ืขื ืขืจื›ื™ ื ืชื•ื ื™ื. ื‘ืžืงืจื™ื ืืœื”, ื”ื ื“ื•ืจืฉื™ื 1 ื‘ื™ื™ื˜ ื›ื“ื™ ืœืื—ืกืŸ ืืช ืื•ืจืš ื”ืขืžื•ื“ื” (ืืคืก). ืืคืก ื ื’ืจืจ ื‘ืฉื•ืจื” ืื™ื ื• ื“ื•ืจืฉ ืื—ืกื•ืŸ ืžื›ื™ื•ื•ืŸ ืฉื›ื•ืชืจืช ืฉื•ืจื” ื—ื“ืฉื” ืžืกืžื ืช ืฉื”ืขืžื•ื“ื•ืช ื”ื ื•ืชืจื•ืช ื‘ืฉื•ืจื” ื”ืงื•ื“ืžืช ื”ืŸ ืืคืกื™ื•ืช. ืœื“ื•ื’ืžื”, ืื ืฉืœื•ืฉ ื”ืขืžื•ื“ื•ืช ื”ืื—ืจื•ื ื•ืช ื‘ื˜ื‘ืœื” ื”ืŸ null, ืื– ืœื ืžืื•ื—ืกื ื™ื ื ืชื•ื ื™ื ืขื‘ื•ืจ ื”ืขืžื•ื“ื•ืช ื”ืœืœื•.

ืขืœ ืกืžืš ื”ื ืชื•ื ื™ื ื”ืœืœื•, ืื ื• ื‘ื•ื ื™ื ื”ื™ื’ื™ื•ืŸ. ืื ื• ืžื ื™ื—ื™ื ืฉืžืกื“ ื”ื ืชื•ื ื™ื ืžืฉืชืžืฉ ื‘ืงื™ื“ื•ื“ AL32UTF8. ื‘ืงื™ื“ื•ื“ ื–ื”, ืื•ืชื™ื•ืช ืจื•ืกื™ื•ืช ื™ืชืคืกื• 2 ื‘ืชื™ื.

1) A ื•-X, ื”ืขืจืš ืฉืœ ืฉื“ื” a 'Y' ืœื•ืงื— 1 ื‘ื™ื™ื˜, ื”ืขืจืš ืฉืœ ืฉื“ื” x 'D' ืœื•ืงื— 2 ื‘ืชื™ื
2) B ื•-Y, 'Vasya' ื‘-b ื”ืขืจืš ื™ื”ื™ื” ืžืจื•ืคื“ ื‘ืจื•ื•ื—ื™ื ืฉืœ ืขื“ 10 ืชื•ื•ื™ื ื•ื™ื™ืงื— 14 ื‘ืชื™ื, 'Vasya' ื‘-d ื™ื™ืงื— 8 ื‘ืชื™ื.
3) C ื•-K ืœืฉื ื™ ื”ืฉื“ื•ืช ื™ืฉ ืืช ื”ืขืจืš NULL, ืื—ืจื™ื”ื ื™ืฉ ืฉื“ื•ืช ืžืฉืžืขื•ืชื™ื™ื, ืื– ื”ื ืชื•ืคืกื™ื 1 ื‘ื™ื™ื˜.
4) C ื•-Z. ืœืฉื ื™ ื”ืฉื“ื•ืช ื™ืฉ ืืช ื”ืขืจืš NULL, ืื‘ืœ ืฉื“ื” Z ื”ื•ื ื”ืื—ืจื•ืŸ ื‘ื˜ื‘ืœื”, ื›ืš ืฉื”ื•ื ืœื ืชื•ืคืก ืžืงื•ื (0 ื‘ืชื™ื). ืฉื“ื” C ืชื•ืคืก 1 ื‘ื™ื™ื˜.
5) ืง ื•ื–' ื‘ื“ื•ืžื” ืœืžืงืจื” ื”ืงื•ื“ื. ื”ืขืจืš ื‘ืฉื“ื” K ืชื•ืคืก 1 ื‘ื™ื™ื˜, ื‘-Z โ€“ 0.
6) I ื•-J. ืœืคื™ ื”ืชื™ืขื•ื“, ืฉื ื™ ื”ืขืจื›ื™ื ื™ื™ืงื—ื• 2 ื‘ืชื™ื. ืื ื• ืžื—ืฉื‘ื™ื ืืช ื”ืื•ืจืš ื‘ืืžืฆืขื•ืช ื”ื ื•ืกื—ื” ืฉื ืœืงื—ื” ืžื”ืชื™ืขื•ื“: round( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J ื•-X. ื”ืขืจืš ื‘ืฉื“ื” J ื™ื™ืงื— 2 ื‘ืชื™ื, ื”ืขืจืš ื‘ืฉื“ื” X ื™ื™ืงื— 2 ื‘ืชื™ื.

ื‘ืกืš ื”ื›ืœ, ื”ืืคืฉืจื•ื™ื•ืช ื”ื ื›ื•ื ื•ืช ื”ืŸ: 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);

  • ื‘ืขืจืš ืขืฉืจื•ืช
  • ื‘ืขืจืš ืžืื•ืช
  • ื‘ืขืจืš ืืœืคื™ื
  • ื‘ืขืจืš ืขืฉืจื•ืช ืืœืคื™ื

ืชืฉื•ื‘ื”ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-12.1):

ืขื‘ื•ืจ ืื™ื ื“ืงืก ืขืฅ B, ื’ื•ืจื ืžืงื‘ืฅ ื”ืื™ื ื“ืงืก ืžื•ื“ื“ ืืช ื”ืงื™ื‘ื•ืฅ ื”ืคื™ื–ื™ ืฉืœ ืฉื•ืจื•ืช ื‘ื™ื—ืก ืœืขืจืš ืื™ื ื“ืงืก.

ื’ื•ืจื ืžืงื‘ืฅ ื”ืื™ื ื“ืงืก ืขื•ื–ืจ ืœืžื™ื˜ื•ื‘ ืœื”ื—ืœื™ื˜ ืื ืกืจื™ืงืช ืื™ื ื“ืงืก ืื• ืกืจื™ืงืช ื˜ื‘ืœื” ืžืœืื” ื™ืขื™ืœื” ื™ื•ืชืจ ืขื‘ื•ืจ ืฉืื™ืœืชื•ืช ืžืกื•ื™ืžื•ืช). ื’ื•ืจื ืžืงื‘ืฅ ื ืžื•ืš ืžืฆื‘ื™ืข ืขืœ ืกืจื™ืงืช ืื™ื ื“ืงืก ื™ืขื™ืœื”.

ื’ื•ืจื ืžืงื‘ืฅ ืฉืงืจื•ื‘ ืœืžืกืคืจ ื”ื‘ืœื•ืงื™ื ื‘ื˜ื‘ืœื” ืžืฆื™ื™ืŸ ืฉื”ืฉื•ืจื•ืช ืžืกื•ื“ืจื•ืช ืคื™ื–ื™ืช ื‘ื‘ืœื•ืงื™ื ื‘ื˜ื‘ืœื” ืขืœ ื™ื“ื™ ืžืคืชื— ื”ืื™ื ื“ืงืก. ืื ืžืกื“ ื”ื ืชื•ื ื™ื ืžื‘ืฆืข ืกืจื™ืงืช ื˜ื‘ืœื” ืžืœืื”, ืžืกื“ ื”ื ืชื•ื ื™ื ื ื•ื˜ื” ืœืื—ื–ืจ ืืช ื”ืฉื•ืจื•ืช ื›ืฉื”ืŸ ืžืื•ื—ืกื ื•ืช ื‘ื“ื™ืกืง ืžืžื•ื™ื ื™ื ืœืคื™ ืžืคืชื— ื”ืื™ื ื“ืงืก. ื’ื•ืจื ืžืงื‘ืฅ ืฉืงืจื•ื‘ ืœืžืกืคืจ ื”ืฉื•ืจื•ืช ืžืฆื™ื™ืŸ ืฉื”ืฉื•ืจื•ืช ืžืคื•ื–ืจื•ืช ื‘ืื•ืคืŸ ืืงืจืื™ ืขืœ ืคื ื™ ื‘ืœื•ืงื™ื ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ื™ื—ืก ืœืžืคืชื— ื”ืื™ื ื“ืงืก. ืื ืžืกื“ ื”ื ืชื•ื ื™ื ืžื‘ืฆืข ืกืจื™ืงืช ื˜ื‘ืœื” ืžืœืื”, ืžืกื“ ื”ื ืชื•ื ื™ื ืœื ื™ืื—ื–ืจ ืฉื•ืจื•ืช ื‘ืฉื•ื ืกื“ืจ ืžืžื•ื™ืŸ ืœืคื™ ืžืคืชื— ืื™ื ื“ืงืก ื–ื”.

ื‘ืžืงืจื” ื–ื”, ื”ื ืชื•ื ื™ื ืžืžื•ื™ื ื™ื ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™, ื›ืš ืฉื’ื•ืจื ื”ืืฉื›ื•ืœื•ืช ื™ื”ื™ื” ืฉื•ื•ื” ืื• ืงืจื•ื‘ ืœืžืกืคืจ ื”ื‘ืœื•ืงื™ื ื”ืชืคื•ืกื™ื ื‘ื˜ื‘ืœื”. ืขื‘ื•ืจ ื’ื•ื“ืœ ื‘ืœื•ืง ืกื˜ื ื“ืจื˜ื™ ืฉืœ 8 ืงื™ืœื•ื‘ื™ื™ื˜, ืืชื” ื™ื›ื•ืœ ืœืฆืคื•ืช ื›ื™ ื›ืืœืฃ ืขืจื›ื™ ืžืกืคืจ ืฆืจื™ื ื™ืฉืชืœื‘ื• ื‘ื‘ืœื•ืง ืื—ื“, ื›ืš ืฉืžืกืคืจ ื”ื‘ืœื•ืงื™ื, ื•ื›ืชื•ืฆืื” ืžื›ืš, ื’ื•ืจื ื”ืืฉื›ื•ืœื•ืช ื™ื”ื™ื” ื‘ืขืจืš ืขืฉืจื•ืช.

ื‘ืื™ืœื• ืขืจื›ื™ื ืฉืœ N ื”ืกืงืจื™ืคื˜ ื”ื‘ื ื™ื‘ื•ืฆืข ื‘ื”ืฆืœื—ื” ื‘ืžืกื“ ื ืชื•ื ื™ื ืจื’ื™ืœ ืขื ื”ื’ื“ืจื•ืช ืกื˜ื ื“ืจื˜ื™ื•ืช?

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

ืชืฉื•ื‘ื”ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-11.2):

ืžื’ื‘ืœื•ืช ืžืกื“ ื ืชื•ื ื™ื ืœื•ื’ื™

ืคืจื™ื˜
ืกื•ื’ ื”ื’ื‘ืœื”
ืขืจืš ืžื•ื’ื‘ืœ

ืื™ื ื“ืงืกื™ื
ื”ื’ื•ื“ืœ ื”ื›ื•ืœืœ ืฉืœ ื”ืขืžื•ื“ื” ืฉื ื•ืกืคื” ืœืื™ื ื“ืงืก
75% ืžื’ื•ื“ืœ ื‘ืœื•ืง ืžืกื“ ื”ื ืชื•ื ื™ื ืคื—ื•ืช ืชืงื•ืจื” ืžืกื•ื™ืžืช

ืœืคื™ื›ืš, ื”ื’ื•ื“ืœ ื”ื›ื•ืœืœ ืฉืœ ื”ืขืžื•ื“ื•ืช ืฉื ื•ืกืคื• ืœืื™ื ื“ืงืก ืœื ื™ืขืœื” ืขืœ 6Kb. ืžื” ืฉืงื•ืจื” ืœืื—ืจ ืžื›ืŸ ืชืœื•ื™ ื‘ืงื™ื“ื•ื“ ื”ื‘ืกื™ืก ืฉื ื‘ื—ืจ. ืขื‘ื•ืจ ืงื™ื“ื•ื“ AL32UTF8, ืชื• ืื—ื“ ื™ื›ื•ืœ ืœืชืคื•ืก ืžืงืกื™ืžื•ื 4 ื‘ืชื™ื, ื›ืš ืฉื‘ืžืงืจื” ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ, ื›-6 ืชื•ื•ื™ื ื™ืชืื™ืžื• ืœ-1500 ืงื™ืœื•ื‘ื™ื™ื˜. ืœื›ืŸ, ืื•ืจืงืœ ืชื‘ื˜ืœ ื™ืฆื™ืจืช ืื™ื ื“ืงืก ื‘-N = 400 (ื›ืืฉืจ ืื•ืจืš ื”ืžืคืชื— ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ ื”ื•ื 1600 ืชื•ื•ื™ื * 4 ื‘ืชื™ื + ืื•ืจืš ืฉื•ืจื”), ื‘ืขื•ื“ ื‘-N = 200 (ืื• ืคื—ื•ืช) ื™ืฆื™ืจืช ื”ืื™ื ื“ืงืก ืชืขื‘ื•ื“ ืœืœื ื‘ืขื™ื•ืช.

ื”ืื•ืคืจื˜ื•ืจ INSERT ืขื ื”ืจืžื– APPEND ื ื•ืขื“ ืœื˜ืขื•ืŸ ื ืชื•ื ื™ื ื‘ืžืฆื‘ ื™ืฉื™ืจ. ืžื” ืงื•ืจื” ืื ื–ื” ืžื•ื—ืœ ืขืœ ื”ืฉื•ืœื—ืŸ ืฉืขืœื™ื• ืชืœื•ื™ ื”ื”ื“ืง?

  • ื”ื ืชื•ื ื™ื ื™ื™ื˜ืขื ื• ื‘ืžืฆื‘ ื™ืฉื™ืจ, ื”ื˜ืจื™ื’ืจ ื™ืคืขืœ ื›ืžืฆื•ืคื”
  • ื”ื ืชื•ื ื™ื ื™ื™ื˜ืขื ื• ื‘ืžืฆื‘ ื™ืฉื™ืจ, ืืš ื”ื˜ืจื™ื’ืจ ืœื ื™ื‘ื•ืฆืข
  • ื”ื ืชื•ื ื™ื ื™ื™ื˜ืขื ื• ื‘ืžืฆื‘ ืงื•ื ื‘ื ืฆื™ื•ื ืœื™, ื”ื˜ืจื™ื’ืจ ื™ืคืขืœ ื›ืžื• ืฉืฆืจื™ืš
  • ื”ื ืชื•ื ื™ื ื™ื™ื˜ืขื ื• ื‘ืžืฆื‘ ืจื’ื™ืœ, ืืš ื”ื˜ืจื™ื’ืจ ืœื ื™ื‘ื•ืฆืข
  • ื”ื ืชื•ื ื™ื ืœื ื™ื™ื˜ืขื ื•, ืชื™ืจืฉื ืฉื’ื™ืื”

ืชืฉื•ื‘ื”ื‘ืขื™ืงืจื•ืŸ, ื–ื• ื™ื•ืชืจ ืฉืืœื” ืฉืœ ื”ื™ื’ื™ื•ืŸ. ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ืชืฉื•ื‘ื” ื”ื ื›ื•ื ื”, ื”ื™ื™ืชื™ ืžืฆื™ืข ืืช ืžื•ื“ืœ ื”ื”ื™ื’ื™ื•ืŸ ื”ื‘ื:

  1. ื”ื›ื ืกื” ื‘ืžืฆื‘ ื™ืฉื™ืจ ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ ื™ืฆื™ืจื” ื™ืฉื™ืจื” ืฉืœ ื‘ืœื•ืง ื ืชื•ื ื™ื, ืขืงื™ืคืช ืžื ื•ืข ื”-SQL, ื”ืžื‘ื˜ื™ื— ืžื”ื™ืจื•ืช ื’ื‘ื•ื”ื”. ืœืคื™ื›ืš, ื”ื‘ื˜ื—ืช ื‘ื™ืฆื•ืข ื”ื˜ืจื™ื’ืจ ืงืฉื” ืžืื•ื“, ืื ืœื ื‘ืœืชื™ ืืคืฉืจื™ืช, ื•ืื™ืŸ ื‘ื›ืš ื˜ืขื, ืฉื›ืŸ ื–ื” ืขื“ื™ื™ืŸ ื™ืื˜ ื‘ืื•ืคืŸ ืงื™ืฆื•ื ื™ ืืช ื”ื”ื—ื“ืจื”.
  2. ืื™ ื‘ื™ืฆื•ืข ื”ื˜ืจื™ื’ืจ ื™ื•ื‘ื™ืœ ืœื›ืš ืฉืื ื”ื ืชื•ื ื™ื ื‘ื˜ื‘ืœื” ื–ื”ื™ื, ืžืฆื‘ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ื›ืœืœื•ืชื• (ื˜ื‘ืœืื•ืช ืื—ืจื•ืช) ื™ื”ื™ื” ืชืœื•ื™ ื‘ืžืฆื‘ ื‘ื• ื”ื•ื›ื ืกื• ื ืชื•ื ื™ื ืืœื•. ื–ื” ื›ืžื•ื‘ืŸ ื™ื”ืจื•ืก ืืช ืฉืœืžื•ืช ื”ื ืชื•ื ื™ื ื•ืœื ื ื™ืชืŸ ืœื™ื™ืฉื ืื•ืชื• ื›ืคืชืจื•ืŸ ื‘ื™ื™ืฆื•ืจ.
  3. ื—ื•ืกืจ ื”ื™ื›ื•ืœืช ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื” ื”ืžื‘ื•ืงืฉืช ืžื˜ื•ืคืœ ื‘ื“ืจืš ื›ืœืœ ื›ืฉื’ื™ืื”. ืื‘ืœ ื›ืืŸ ืฆืจื™ืš ืœื–ื›ื•ืจ ืฉ-APPEND ื”ื•ื ืจืžื–, ื•ื”ื”ื™ื’ื™ื•ืŸ ื”ื›ืœืœื™ ืฉืœ ื”ืจืžื–ื™ื ื”ื•ื ืฉื”ื ื ืœืงื—ื™ื ื‘ื—ืฉื‘ื•ืŸ ืื ืืคืฉืจ, ืื‘ืœ ืื ืœื, ื”ืื•ืคืจื˜ื•ืจ ืžื‘ื•ืฆืข ืžื‘ืœื™ ืœืงื—ืช ืืช ื”ืจืžื– ื‘ื—ืฉื‘ื•ืŸ.

ืื– ื”ืชืฉื•ื‘ื” ื”ืฆืคื•ื™ื” ื”ื™ื ื”ื ืชื•ื ื™ื ื™ื™ื˜ืขื ื• ื‘ืžืฆื‘ ืจื’ื™ืœ (SQL), ื”ื“ืง ื™ื•ืคืขืœ.

ืขืœ ืคื™ ืชื™ืขื•ื“ ืฉืœ ืื•ืจืงืœ (ืžืฆื•ื˜ื˜ ืž-8.04):

ื”ืคืจื•ืช ืฉืœ ื”ื”ื’ื‘ืœื•ืช ื™ื’ืจืžื• ืœื‘ื™ืฆื•ืข ื”ื”ืฆื”ืจื” ื‘ืื•ืคืŸ ืกื“ืจืชื™, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื ืชื™ื‘ ื”ื”ื•ืกืคื” ื”ืžืงื•ื‘ืœ, ืœืœื ืื–ื”ืจื•ืช ืื• ื”ื•ื“ืขื•ืช ืฉื’ื™ืื”. ื™ื•ืฆื ืžืŸ ื”ื›ืœืœ ื”ื•ื ื”ื”ื’ื‘ืœื” ืขืœ ื’ื™ืฉื” ืœืžืฉืคื˜ื™ื ืœืื•ืชื” ื˜ื‘ืœื” ื™ื•ืชืจ ืžืคืขื ืื—ืช ื‘ื˜ืจื ื–ืงืฆื™ื”, ืžื” ืฉืขืœื•ืœ ืœื’ืจื•ื ืœื”ื•ื“ืขื•ืช ืฉื’ื™ืื”.
ืœื“ื•ื’ืžื”, ืื ืงื™ื™ืžื™ื ื˜ืจื™ื’ืจื™ื ืื• ืฉืœืžื•ืช ื”ืคื ื™ื•ืช ืขืœ ื”ื˜ื‘ืœื”, ื”ืจืžื– APPEND ื™ืชืขืœื ื›ืืฉืจ ืชื ืกื” ืœื”ืฉืชืžืฉ ื‘-INSERT ื‘ืขืœ ืขื•ืžืก ื™ืฉื™ืจ (ื˜ื•ืจื™ ืื• ืžืงื‘ื™ืœ), ื›ืžื• ื’ื ื‘ืจืžื– PARALLEL ืื• ืกืขื™ืฃ, ืื ื™ืฉ.

ืžื” ื™ืงืจื” ื›ืฉื”ืกืงืจื™ืคื˜ ื”ื‘ื ื™ื‘ื•ืฆืข?

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);

  • ื”ืฉืœืžื” ืžื•ืฆืœื—ืช
  • ื›ืฉืœ ืขืงื‘ ืฉื’ื™ืืช ืชื—ื‘ื™ืจ
  • ืฉื’ื™ืื”: ื”ืขืกืงื” ื”ืื•ื˜ื•ื ื•ืžื™ืช ืื™ื ื” ื—ื•ืงื™ืช
  • ืฉื’ื™ืื” ื”ืงืฉื•ืจื” ืœื—ืจื™ื’ืช ืงื™ื ื•ืŸ ื”ืฉื™ื—ื” ื”ืžืงืกื™ืžืœื™ืช
  • ืฉื’ื™ืืช ื”ืคืจืช ืžืคืชื— ื–ืจ
  • ืฉื’ื™ืื” ื”ืงืฉื•ืจื” ืœืžื ืขื•ืœื™ื

ืชืฉื•ื‘ื”ื”ื˜ื‘ืœื” ื•ื”ื˜ืจื™ื’ืจ ื ื•ืฆืจื™ื ื‘ืฆื•ืจื” ื“ื™ ื ื›ื•ื ื” ื•ื”ืคืขื•ืœื” ื”ื–ื• ืœื ืืžื•ืจื” ืœื”ื•ื‘ื™ืœ ืœื‘ืขื™ื•ืช. ืžื•ืชืจื•ืช ื’ื ืขืกืงืื•ืช ืื•ื˜ื•ื ื•ืžื™ื•ืช ื‘ื˜ืจื™ื’ืจ, ืื—ืจืช ืจื™ืฉื•ื ืœื ื™ืชืืคืฉืจ, ืœืžืฉืœ.

ืœืื—ืจ ื”ื›ื ืกืช ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื”, ื™ืจื™ ื˜ืจื™ื’ืจ ืžื•ืฆืœื— ื™ื’ืจื•ื ืœื”ื›ื ืกืช ื”ืฉื•ืจื” ื”ืฉื ื™ื™ื”, ื™ื’ืจื•ื ืœื”ืคืขืœืช ื”ื”ื“ืง ืฉื•ื‘, ื”ื›ื ืกืช ืฉื•ืจื” ืฉืœื™ืฉื™ืช, ื•ื›ืŸ ื”ืœืื” ืขื“ ืฉื”ื”ืฆื”ืจื” ื ื›ืฉืœื” ืขืงื‘ ื—ืจื™ื’ื” ืžื”ืงื™ื ื•ืŸ ื”ืžืงืกื™ืžืœื™ ืฉืœ ืฉื™ื—ื•ืช. ืขื ื–ืืช, ื ืงื•ื“ื” ืขื“ื™ื ื” ื ื•ืกืคืช ื ื›ื ืกืช ืœืชืžื•ื ื”. ื‘ื–ืžืŸ ืฉื”ื˜ืจื™ื’ืจ ืžื‘ื•ืฆืข, ื”-commit ืขื“ื™ื™ืŸ ืœื ื”ื•ืฉืœื ืขื‘ื•ืจ ื”ืจืฉื•ืžื” ื”ืจืืฉื•ื ื” ืฉื”ื•ื›ื ืกื”. ืœื›ืŸ, ื˜ืจื™ื’ืจ ื”ืคื•ืขืœ ื‘ื˜ืจื ื–ืงืฆื™ื” ืื•ื˜ื•ื ื•ืžื™ืช ืžื ืกื” ืœื”ื›ื ื™ืก ืœื˜ื‘ืœื” ืฉื•ืจื” ื”ืžืคื ื” ืžืคืชื— ื–ืจ ืœืจืฉื•ืžื” ืฉื˜ืจื ื‘ื•ืฆืขื”. ื–ื” ื’ื•ืจื ืœื”ืžืชื ื” (ื”ื˜ืจื ื–ืงืฆื™ื” ื”ืื•ื˜ื•ื ื•ืžื™ืช ืžืžืชื™ื ื” ืœื”ืชื—ื™ื™ื‘ื•ืช ืฉืœ ื”ืขืกืงื” ื”ืจืืฉื™ืช ื›ื“ื™ ืœืจืื•ืช ืื ื”ื™ื ื™ื›ื•ืœื” ืœื”ื›ื ื™ืก ื ืชื•ื ื™ื) ื•ื‘ืžืงื‘ื™ืœ ื”ืขืกืงื” ื”ืจืืฉื™ืช ืžืžืชื™ื ื” ืฉื”ืขืกืงื” ื”ืื•ื˜ื•ื ื•ืžื™ืช ืชืžืฉื™ืš ืœืขื‘ื•ื“ ืœืื—ืจ ื”ื˜ืจื™ื’ืจ. ืžืชืจื—ืฉืช ืžื‘ื•ื™ ืกืชื•ื ื•ื›ืชื•ืฆืื” ืžื›ืš ื”ืขืกืงื” ื”ืื•ื˜ื•ื ื•ืžื™ืช ืžื‘ื•ื˜ืœืช ืžืกื™ื‘ื•ืช ื”ืงืฉื•ืจื•ืช ืœืžื ืขื•ืœื™ื.

ืจืง ืžืฉืชืžืฉื™ื ืจืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืชืฃ ื‘ืกืงืจ. ืœื”ืชื—ื‘ืจื‘ื‘ืงืฉื”.

ื”ื™ื” ืงืฉื”?

  • ื›ืžื• ืฉืชื™ ืืฆื‘ืขื•ืช, ืžื™ื“ ื”ื—ืœื˜ืชื™ ื”ื›ืœ ื ื›ื•ืŸ.

  • ืœื ืžืžืฉ, ื˜ืขื™ืชื™ ื‘ื›ืžื” ืฉืืœื•ืช.

  • ืคืชืจืชื™ ื—ืฆื™ ื ื›ื•ืŸ.

  • ื ื™ื—ืฉืชื™ ืืช ื”ืชืฉื•ื‘ื” ืคืขืžื™ื™ื!

  • ืื ื™ ืื›ืชื•ื‘ ื‘ืชื’ื•ื‘ื•ืช

14 ืžืฉืชืžืฉื™ื ื”ืฆื‘ื™ืขื•. 10 ืžืฉืชืžืฉื™ื ื ืžื ืขื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”