Ndewo!
Na June 24-25, e nwere ọgbakọ Highload++ Siberia 2019 na Novosibirsk. Ụmụ okorobịa anyị nọkwa ebe ahụ.
Na post a, anyị ga-achọ ịkọrọ gị nsogbu ndị anyị nwere n'ụlọ ntu anyị ka i wee nwalee ihe ọmụma Oracle gị. N'okpuru ịkpụ bụ nsogbu 8, nhọrọ azịza na nkọwa.
Kedu uru usoro kachasị elu anyị ga-ahụ n'ihi ime ihe odide a?
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
- Mba, a ga-enwe mperi
AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 8.1.6):
N'ime otu nkwupụta SQL, Oracle ga-abawanye usoro ahụ naanị otu ugboro n'ahịrị. Ọ bụrụ na nkwupụta nwere ihe karịrị otu ntụaka na NEXTVAL maka usoro, Oracle na-abawanye usoro ahụ otu ugboro wee weghachi otu uru maka ihe omume niile nke NEXTVAL. Ọ bụrụ na nkwupụta nwere ntụaka maka ma CURRVAL na NEXTVAL, Oracle na-abawanye usoro ahụ wee weghachi otu uru maka ma CURRVAL na NEXTVAL n'agbanyeghị usoro ha dị na nkwupụta ahụ.
N'ihi ya, uru kacha elu ga-adaba na ọnụọgụ ahịrị, ya bụ 5.
Ahịrị ole ga-adị na tebụl n'ihi ịgba ọsọ edemede a?
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
AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):
Tupu imezu nkwupụta SQL ọ bụla, Oracle na-egosi ebe nchekwa ezoro ezo (anaghị adị gị). Mgbe ahụ, ọ bụrụ na nkwupụta ahụ daa, Oracle na-atụgharị ya azụ na-akpaghị aka wee weghachi koodu njehie dị na SQLCODE na SQLCA. Dịka ọmụmaatụ, ọ bụrụ na nkwupụta INSERT kpatara mperi site n'ịgbalị ịtinye uru oyiri na ndeksi pụrụ iche, a ga-atụgharịghachi nkwupụta ahụ.
A na-atụle ịkpọ HP n'aka onye ahịa ma hazie ya dị ka otu nkwupụta. Ya mere, oku HP nke mbụ na-emezu nke ọma, na-etinye ihe ndekọ atọ; oku HP nke abụọ na-ejedebe na njehie wee tụgharịa ndekọ nke anọ ọ jisiri ike tinye; okuku nke ato ada ada, ma enwere ihe ndekọ atọ na tebụl.
Ahịrị ole ga-adị na tebụl n'ihi ịgba ọsọ edemede a?
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
AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):
Mmachi nlele na-enye gị ohere ịkọwapụta ọnọdụ na ahịrị ọ bụla na tebụl ga-eju afọ. Iji meju ihe mgbochi ahụ, ahịrị ọ bụla dị na tebụl ga-emerịrị ọnọdụ ahụ ma ọ bụ EZIOKWU ma ọ bụ amaghị (n'ihi efu). Mgbe Oracle na-enyocha ọnọdụ mmachi nlele maka otu ahịrị, aha kọlụm ọ bụla na ọnọdụ ahụ na-ezo aka na ụkpụrụ kọlụm dị n'ahịrị ahụ.
Ya mere, uru null ga-agafe ego ahụ, a ga-egbukwa ngọngọ na-amaghị aha nke ọma ruo mgbe mgbalị iji tinye uru 3. Mgbe nke a gasịrị, nkwụsị njikwa njehie ga-ekpochapụ ihe ahụ, ọ dịghị ntụgharị ga-eme, na a ga-enwe ahịrị anọ fọdụrụ na tebụl nwere ụkpụrụ 1, efu, 2 na efu ọzọ.
Kedu ụzọ abụọ nke ụkpụrụ ga-ewe otu oghere na ngọngọ?
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 na X
- B na Y
- C na K
- C na Z
- K na Z
- Mụ na J
- J na X
- Edere ha niile
AzịzaNke a bụ nkọwapụta sitere na akwụkwọ (12.1.0.2) maka ịchekwa ụdị data dị iche iche na Oracle.
Ụdị data CHAR
Ụdị data CHAR na-akọwapụta eriri agwa ogologo n'ime njirimara nchekwa data. Ị na-akọwapụta mkpụrụedemede nchekwa data setịpụrụ mgbe ị mepụtara nchekwa data gị. Oracle na-achọpụta na ụkpụrụ niile echekwara na kọlụm CHAR nwere ogologo akọwapụtara site na nha n'ime usoro ọmụmụ ogologo ahọpụtara. Ọ bụrụ na itinye uru dị mkpụmkpụ karịa ogologo kọlụm, mgbe ahụ Oracle oghere-pad uru na ogologo kọlụm.
Ụdị data VARCHAR2
Ụdị data VARCHAR2 na-akọwapụta eriri agwa ogologo agbanwe agbanwe na ntọala njirimara nchekwa data. Ị na-akọwapụta mkpụrụedemede nchekwa data setịpụrụ mgbe ị mepụtara nchekwa data gị. Oracle na-echekwa uru agwa na kọlụm VARCHAR2 kpọmkwem dị ka i si ezipụta ya, na-enweghị oghere ọ bụla, ma ọ bụrụhaala na uru ahụ agaghị agafe ogologo nke kọlụm.
Ụdị data NUMBER
Ụdị data NUMBER ahụ na-echekwa efu yana ọnụọgụ dị mma na nke na-adịghị mma nwere ụkpụrụ zuru oke sitere na 1.0 x 10-130 ruo ma ọ bụghị gụnyere 1.0 x 10126. Ọ bụrụ na ị kọwapụta okwu mgbakọ na mwepụ nke uru ya nwere uru zuru oke karịa ma ọ bụ hà nhata. 1.0 x 10126, mgbe ahụ Oracle weghachiri mperi. Uru NUMBER ọ bụla chọrọ site na 1 ruo 22 bytes. N'iburu nke a n'uche, enwere ike gbakọọ nha kọlụm dị na bytes maka uru data ọnụọgụgụ NUMBER(p), ebe p bụ nkenke nke uru enyere, enwere ike gbakọọ site na iji usoro a: Gburugburu ((ogologo (p)+s)/2))+1 ebe s hà nhata efu ma ọ bụrụ na ọnụọgụgụ dị mma, na s nhata 1 ma ọ bụrụ na ọnụọgụ ahụ adịghị mma.
N'ịgbakwụnye, ka anyị wepụta ihe sitere na akwụkwọ gbasara ịchekwa ụkpụrụ Null.
Ihe efu bụ enweghị uru na kọlụm. Nulls na-egosi data efu, amaghị, ma ọ bụ enweghị ọrụ A na-echekwa nulls na nchekwa data ma ọ bụrụ na ha daa n'etiti kọlụm nwere ụkpụrụ data. N'okwu ndị a, ha chọrọ 1 byte iji chekwaa ogologo nke kọlụm (efu). Ntugharị nulls n'usoro anaghị achọ nchekwa n'ihi na nkụnye eji isi mee ahịrị ọhụrụ na-egosi na ogidi ndị fọdụrụ n'ahịrị gara aga bụ efu. Dịka ọmụmaatụ, ọ bụrụ na ogidi atọ ikpeazụ nke tebụl bụ ihe efu, mgbe ahụ ọ dịghị data echekwara maka ogidi ndị a.
Dabere na data ndị a, anyị na-emepụta echiche. Anyị chere na nchekwa data na-eji koodu AL32UTF8. N'ime koodu a, mkpụrụedemede Russia ga-ejide 2 bytes.
1) A na X, uru nke ubi a 'Y' na-ewe 1 byte, uru nke ubi x 'D' na-ewe 2 bytes.
2) B na Y, 'Vasya' na b uru ga-padded na oghere ruo 10 odide na ga-14 bytes, 'Vasya' na d ga-8 bytes.
3) C na K. Ubi abụọ ahụ nwere uru NULL, mgbe ha nwesịrị, enwere ubi dị ịrịba ama, ya mere ha na-eji 1 byte.
4) C na Z. Ubi abụọ ahụ nwere uru NULL, mana ubi Z bụ nke ikpeazụ na tebụl, n'ihi ya, ọ naghị ewe ohere (0 bytes). Ubi C nwere 1 byte.
5) K na Z. Yiri nke gara aga. Uru dị na mpaghara K nwere 1 byte, na Z – 0.
6) M na J. Dị ka akwụkwọ, ma ụkpụrụ ga-2 bytes. Anyị na-agbakọ ogologo site na iji usoro e si na akwụkwọ: gburugburu ((1 + 0)/2) +1 = 1 + 1 = 2.
7) J na X. Uru dị na mpaghara J ga-ewere 2 bytes, uru dị na mpaghara X ga-ewere 2 bytes.
Na mkpokọta, nhọrọ ziri ezi bụ: C na K, I na J, J na X.
Kedu ihe ga-abụ ihe nchịkọta nke ndeksi 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);
- Ihe dị ka iri iri
- Ihe dị ka narị narị
- Ihe dị ka puku kwuru puku
- Ihe dị ka iri puku kwuru iri
AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 12.1):
Maka ndeksi osisi B, ihe nchịkọta ndeksi na-atụle nhazi ahụ nke ahịrị n'ihe metụtara uru ndeksi.
Ihe nchịkọta index na-enyere onye na-ebuli elu aka ikpebi ma nyocha index ma ọ bụ nyocha tebụl zuru oke ọ na-arụ ọrụ nke ọma maka ajụjụ ụfọdụ). Ihe nchịkọta dị ala na-egosi nyocha index nke ọma.
Ihe nchịkọta nke dị nso na ọnụ ọgụgụ nke blocks na tebụl na-egosi na a na-ahazi ahịrị ahụ n'ụzọ anụ ahụ na ngọngọ tebụl site na igodo index. Ọ bụrụ na nchekwa data ahụ na-eme nyocha tebụl zuru ezu, mgbe ahụ, nchekwa data na-achọ ịweghachi ahịrị ndị ahụ ka echekwara ha na diski a na-ahazi site na igodo ndeksi. Ihe nchịkọta nke dị nso na ọnụọgụ nke ahịrị na-egosi na ahịrị ndị ahụ gbasasịa na-enweghị usoro n'ofe nchekwa data n'ihe metụtara igodo ndeksi. Ọ bụrụ na nchekwa data ahụ na-eme nyocha tebụl zuru oke, mgbe ahụ nchekwa data agaghị eweghachi ahịrị n'usoro ọ bụla a haziri site na igodo ndeksi a.
N'okwu a, a na-ahazi data ahụ nke ọma, ya mere ihe nchịkọta nchịkọta ga-adị nhata ma ọ bụ nso na ọnụ ọgụgụ nke ihe mgbochi ejiri na tebụl. Maka ọkọlọtọ ọkọlọtọ nke 8 kilobytes, ị nwere ike ịtụ anya na ihe dị ka otu puku ọnụ ọgụgụ dị warara ga-adaba n'otu ngọngọ, ya mere ọnụ ọgụgụ nke ngọngọ, na n'ihi ya, ihe nchịkọta ga-abụ. ihe dị ka iri iri.
Kedu ụkpụrụ N ga-eme nke ọma na nchekwa data oge niile yana ntọala ọkọlọtọ?
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
AzịzaDịka akwụkwọ Oracle si kwuo (nke ekwuru na 11.2):
Oke nchekwa data ezi uche
item
Ụdị Oke
Oke Uru
index dị iche iche
Ngụkọta nha kọlụm atụnyere aha
75% nke nchekwa data ngọngọ nha na-ewepu ụfọdụ n'elu
Ya mere, ngụkọta nha nke kọlụm ndị e depụtara aha ekwesịghị ịfe 6Kb. Ihe ga-eme na-adabere na ntọala ntọala ahọpụtara. Maka ntinye koodu AL32UTF8, otu agwa nwere ike ịnwe oke nke 4 bytes, yabụ na ọnọdụ kachasị njọ, ihe dị ka mkpụrụedemede 6 ga-adaba na kilobytes 1500. Ya mere, Oracle ga-ahapụ imepụta ndeksi na N = 400 (mgbe ogologo igodo kachasị njọ bụ mkpụrụedemede 1600 * 4 bytes + ogologo ogologo), ebe na N = 200 (ma ọ bụ obere) ịmepụta index ga-arụ ọrụ n'enweghị nsogbu.
Onye na-arụ ọrụ INSERT nwere ntụnye APPEND bụ nke e mere iji buo data na ọnọdụ ozugbo. Kedu ihe ga - eme ma ọ bụrụ na etinye ya na tebụl nke ihe mkpali ahụ kwụkwasịrị?
- A ga-ebuba data ahụ na ọnọdụ kpọmkwem, ihe mkpali ahụ ga-arụ ọrụ dịka a tụrụ anya ya
- A ga-ebunye data ahụ na ọnọdụ ozugbo, mana agaghị eme ihe mkpalite ahụ
- A ga-ebufe data ahụ na ọnọdụ omenala, ihe mkpali ga-arụ ọrụ dị ka o kwesịrị
- A ga-ebunye data ahụ na ọnọdụ nkịtị, mana agaghị eme ihe mkpali ahụ
- Agaghị ebugharị data ahụ, a ga-edekọ njehie
AzịzaN'ụzọ bụ isi, nke a bụ ajụjụ nke mgbagha. Iji chọta azịza ziri ezi, m ga-atụ aro ihe atụ echiche a:
- A na-eme ntinye na ọnọdụ ozugbo site na nhazi nke ngọngọ data, na-agafe engine SQL, nke na-eme ka ọ dị elu. Ya mere, ijide n'aka na ogbugbu nke ihe na-akpata ahụ siri ike, ma ọ bụrụ na ọ gaghị ekwe omume, ọ dịghịkwa uru na nke a, ebe ọ bụ na ọ ka ga-eji nwayọọ nwayọọ na-ebelata ntinye.
- Ịkwụsị ime ihe na-akpalite ga-eduga n'eziokwu na, ọ bụrụ na data dị na tebụl bụ otu, ọnọdụ nke nchekwa data n'ozuzu (tebụl ndị ọzọ) ga-adabere na ọnọdụ nke etinyere data a. Nke a ga-emebi n'ụzọ doro anya data iguzosi ike n'ezi ihe na enweghị ike tinye ya dị ka ihe ngwọta na mmepụta.
- A na-ewerekarị enweghị ike ịrụ ọrụ a rịọrọ ka njehie. Mana ebe a, anyị kwesịrị icheta na APPEND bụ ihe ngosi, na echiche izugbe nke hints bụ na a na-eburu ha n'uche ma ọ bụrụ na ọ ga-ekwe omume, ma ọ bụrụ na ọ bụghị, a na-egbu onye ọrụ ahụ n'ebughị ihe ngosi ahụ n'uche.
Ya mere azịza a na-atụ anya ya bụ A ga-ebunye data ahụ na ọnọdụ nkịtị (SQL), ihe mkpali ga-agba ọkụ.
Dịka akwụkwọ Oracle si kwuo (nke ekwuru na 8.04):
Mmebi nke mmachi ahụ ga-eme ka nkwupụta ahụ mebie usoro, na-eji ụzọ ntinye nke omenala, na-enweghị ịdọ aka ná ntị ma ọ bụ ozi njehie. Mwepu bụ mmachi na nkwupụta ịnweta otu tebụl ihe karịrị otu ugboro na azụmahịa, nke nwere ike ibute ozi njehie.
Dịka ọmụmaatụ, ọ bụrụ na ihe na-akpali ma ọ bụ nkwenye nrụnye dị na tebụl, a ga-eleghara ihe ngosi APPEND anya mgbe ị na-agbalị iji INSERT-load (serial or parallel), yana PARALLEL hint ma ọ bụ nkebiokwu, ọ bụrụ na ọ bụla.
Kedu ihe ga-eme mgbe emechara edemede a?
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);
- Emecha nke ọma
- Ọdịda n'ihi njehie syntax
- Njehie: Azụmahịa akpaghị aka adabaghị
- Njehie metụtara ịgafe nesting oku kacha
- Njehie mmejọ igodo mba ofesi
- Njehie metụtara mkpọchi
AzịzaA na-emepụta tebụl na ihe na-akpali akpali nke ọma na ọrụ a ekwesịghị ịkpata nsogbu. A na-anabatakwa azụmahịa ndị kwụụrụ onwe ya na mkpalite, ma ọ bụghị igbu osisi agaghị ekwe omume, dịka ọmụmaatụ.
Mgbe itinye n'ahịrị nke mbụ, ịgba egbe na-aga nke ọma ga-eme ka ntinye ahịrị nke abụọ, na-eme ka ihe na-eme ka ọ gbanye ọkụ ọzọ, na-etinye ahịrị nke atọ, na ihe ndị ọzọ ruo mgbe nkwupụta ahụ dara n'ihi na ọ gafechara oke oku. Agbanyeghị, isi ihe ọzọ dị nro na-abata n'ime. N'oge a na-eme ihe mkpalite, emechabeghị maka ndekọ mbụ etinyere. Ya mere, ihe na-akpalite na-agba ọsọ na azụmahịa kwụụrụ onwe ya na-agbalị itinye n'ime tebụl ahịrị nke na-ezo aka igodo mba ọzọ na ndekọ na-emebeghị. Nke a na-ebute nchere (ịzụ ahịa nke kwụụrụ onwe ya na-echere isi azụmahịa iji hụ ma ọ nwere ike itinye data) ma n'otu oge ahụ azụmahịa bụ isi na-echere ka azụmahịa ahụ kwụụrụ onwe ya nọgide na-arụ ọrụ mgbe mkpali ahụ gasịrị. Mkpọchi na-eme ma, n'ihi ya, a kagbuo azụmahịa ahụ kwụụrụ onwe ya n'ihi ihe ndị metụtara mkpọchi.
Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a.
O siri ike?
-
Dị ka mkpịsị aka abụọ, ekpebiri m ozugbo ihe niile n'ụzọ ziri ezi.
-
Ọbụghị n'ezie, ezighi ezi na ajụjụ abụọ.
-
M doziri ọkara ya nke ọma.
-
Echere m azịza ya ugboro abụọ!
-
Aga m ede na nkọwa
Ndị ọrụ 14 tụrụ vootu. Ndị ọrụ 10 anabataghị.
isi: www.habr.com