Sunteți pe pagina 1din 3

Indexarea tabelelor

Un index este o structur opional a bazei de date care permite accesarea direct a unui rnd dintr-
un tabel. Indecii pot fi creai pentru una sau mai multe coloane a unui tabel, n acest ultim caz
folosindu-se denumirea de indeci compui sau indeci concatenai. Un index este utilizat de ctre
sistemul de gestiune al bazei de date pentru a gsi rapid valori pentru coloana sau coloanele pentru
care a fost creat indexul, furniznd o cale de acces direct la rndurile asociate acestora fr a mai fi
necesar investigarea fiecrui rnd din tabel. ractic, n momentul n care se dorete cutarea
anumitor nregistrri ale cror valori ndeplinesc un anumit criteriu, n loc s se parcurg tabelul, se
parcurge indexul, acesta din urm furniznd localizarea exact a nregistrrilor ce ndeplinesc criteriul
de cutare.
rezena indecilor este transparent pentru utilizator i aplicaie, !"# !erver ia decizia utilizrii
unui index pe baza unor date care sintetizeaz distribuia informaiilor din tabele, prin urmare indecii
nu trebuie obligatoriu s fie referii n mod direct prin interogri. $n plus, sintaxa unei comenzi !"#
nu este n nici un fel influenat de existena indecilor, iar rezultatele oricrei interogri vor fi
aceleai indiferent dac exist indeci sau nu.
Indecii sunt independeni din punct de vedere fizic i logic de datele din tabelul de baz. Un index
poate fi creat i distrus fr ca datele din tabelul de baz sau ceilali indeci s aib de suferit.
!ingurul lucru pe care indexul l va modifica va fi durata accesului la datele tabelului, acesta devenind
mai lent n absena indexului. %vident, odat cu tergerea unui tabel sunt teri i indecii asociai
acestuia.
Indecii pot s fie unici sau ne-unici. Indecii unici garanteaz faptul c nu va exista nici o perec&e
de rnduri care s aib valori identice pentru coloana sau grupul de coloane pentru care a fost definit
indexul. 'alorile Null sunt ignorate de criteriul de unicitate. Un rnd cu valoarea (ull n coloana
indexat nu va fi nregistrat n index, deci un index unic nu va mpiedica stocarea mai multor rnduri
cu o valoare (ull n coloana indexat. Un index ne-unic nu impune nicio restricie n legtur cu
valorile din coloanele care l definesc.
)dat definit, un index este actualizat de ctre baza de date ori de cte ori au loc modificri ale
datelor tabelului. *ceasta nseamn c ori de cte ori au loc inserri, tergeri sau modificri ale
datelor unui tabel, toi indecii acelui tabel sunt actualizai n mod automat, acest lucru avnd ca efect
ncetinirea acestor operaii asupra datelor tabelului. +u alte cuvinte, existena indecilor sporete
viteza accesului la datele tabelului pe de o parte, dar n acelai timp ncetinete operaiile de
modificare ale acestora. ,e aceea, nu trebuie creat un index pentru fiecare coloan a unui tabel -dei
acest lucru este posibil., ci pentru anumite coloane c&eie ale acestuia. ,e exemplu, se recomand
indexarea coloanelor care conin n ma/oritate valori unice sau un domeniu larg de valori sau coloane
dup care se fac dese cutri sau ordonri.
,eoarece prezena indecilor poate avea un impact semnificativ asupra eficienei aplicaiei n
continuare prezentm cteva sugestii privind folosirea acestora
0
1
Ce tabele trebuie indexate:
Indexai tabelele pentru care ma/oritatea interogrilor selecteaz doar un numr redus de rnduri
-sub 23.. Interogrile care selecteaz un numr mare de rnduri nu folosesc n mod eficient
indecii.
(u indexai tabele ce conin puine nregistrri deoarece n acest caz accesul secvenial va fi mai
rapid.
Indexai tabelele care sunt interogate folosind fraze !"# simple. +lauzele !"# mai complexe nu
folosesc cu aceeai eficien indecii.
(u indexai tabelele care sunt actualizate frecvent. Inserrile, modificrile i tergerile sunt
ngreunate de existena indecilor. ,ecizia de a indexa un tabel trebuie luat pe baza raportului
dintre numrul de interogri i cel de actualizri efectuat asupra acestuia.
0
4lorentin %ugen Ipate, 5onica opescu, ,ezvoltarea aplica iilor de baze de date n )racle 6 i 4orms 7
0
Indexai tabelele care nu au valori duplicate n coloanele care apar n clauza WHERE a celor mai
frecvente interogri.
Ce coloane trebuie indexate:
4olosii coloanele cele mai frecvent folosite n clauza WHERE a interogrilor.
(u se recomand indexarea coloanelor cu numr mic de valori distincte.
+oloanele care au valori distincte sunt candidate foarte bune pentru indexare. ,e altfel, !"#
!erver creeaz n mod automat indeci unici pentru coloanele definite ca PRIMARY KEY sau
UNIQUE. $n plus, din punct de vedere logic, este preferabil ca indecii unici s nu fie definii n
mod explicit, ci prin intermediul constrngerilor PRIMARY KEY i UNIQUE - acesta deoarece
unicitatea este un concept logic i ar trebui s fie asociat cu definiia tabelului.
+oloanele care sunt folosite pentru a face legtura dintre tabele sunt n general candidate pentru
indexare. $n general, se recomand indexarea c&eilor strine.
$n anumite situaii, folosirea indecilor compui poate fi mai eficient dect a celor individuali. ,e
exemplu, crearea indecilor compui este recomandabil cnd dou coloane nu sunt unice fiecare
n parte dar combinaia lor este unic sau are n ma/oritate valori unice. ,e asemenea, se
recomand crearea indecilor compui atunci cnd interogrile uzuale ale tabelului conin n
clauza WHERE mai multe coloane individuale legate prin AND.
Indecii consum spaiu n baza de date la fel ca i tabelele i exist ntr-un spaiu tabel la fel ca i
acestea. !paiul necesar indecilor pentru tabele mari este de obicei semnificativ, aa c trebuie
planificat din momentul n care se proiecteaz baza de date.
$n !"# un index se creeaz folosind comanda CREATE INDEX. ) sintax simplificat a acestei
comenzi se prezint astfel1
CREATE [unique] [clustered | nnclustered] INDE! denu"ire#inde$
%N t&'el (cl&n& [A)C|DE)C] [*+++],
unde1
- ,ac este specificat opiunea U(I"U%, indexul creat conine valori unice -ceea ce implic
faptul ca n tabel nu pot exista dou rnduri cu valori identice n coloanele ce formeaz
indexul., altfel nu.
- Clustered indic faptul c pentru indexul creat, ordinea fizic a tuplelor coincide cu cea
logic corespunzatoare indexului. *ceasta implic reordonarea fizic a rndurilor tabelului.
entru un tabel se poate defini cel mult un index clustered la un moment dat. 'aloarea
implicit este nonclustered.
%xemple1
Cre&te inde$ I$#CNP n t)tudenti(CNP,
cre&te inde$ I$#Nu"eC"-let n t)tudenti(nu"e*-renu"e,
)elect . /r" t)tudenti 01ere CNP23454674849:;7<3
== -&rcur>ere du-& inde$ul I$#CNP
)elect . /r" t)tudenti
01ere Nu"e23R&du3 &nd -renu"e23In3 == -&rcur>ere du-& inde$ul I$#Nu"eC"-let
)elect . /r" t)tudenti 01ere Nu"e23R&du3? == -&rcur>ere du-& inde$ul
I$#Nu"eC"-let
8
+rearea indecilor unui tabel se recomand s se fac dup ce tabelul a fost populat cu date - aceasta
deoarece existena indecilor ncetinete n mod evident inserarea datelor.
#a definirea constrngerilor PRIMARY KEY i UNIQUE sau la activarea acestora, !"# !erver
creeaz n mod automat indeci unici pentru coloanele sau grupurile de coloane respective. $n acest
caz denumirea indexului coincide cu denumirea constrngerii.
Impunerea utilizrii unui anumit index.
!"# !erver permite referirea unui index ntr-o fraz !%#%+9 prin specificarea acestuia n clauza
4:)5. !intaxa simplificat este1
SELECT lista_de_coloane FROM denumire_tabel WITH (INDE!denumire_inde".
sau
)E@ECT list&#de#cl&ne AR%M denu"ire#t&'el WITH (INDE!(denu"ire#inde$, ,
%xemple1
)elect . /r" t)tudenti 0it1 (inde$2i$Nu"eC"-let,
)elect . /r" t)tudenti &s A 0it1 (inde$2i$Nu"eC"-let,
inner Bin tReCult&teE$&"ene &s D n A+Cd)td2D+Cd)td
Un index poate fi eliminat folosind comanda DR%P INDE! cu urmtoarea sintax1
DR%P INDE! Denu"ireT&'el+denu"ire#inde$?
,e exemplu1
DR%P INDE! t)tudenti+I$Nu"eC"-let?
Un index nu poate fi ters dac el a fost creat n mod automat, ca parte a definirii sau a activrii unei
restricii :I5*:; <%; sau U(I"U%. $n acest caz indexul este ters automat la tergerea sau
dezactivarea constrngerii.
=tergerea unui index se face de obicei dac indexul nu mai este necesar, sau nainte de ncrcarea
masiv a datelor ntr-un tabel> tergerea unui index nainte de ncrcarea masiv a datelor i recrearea
lui dup terminarea ncrcrii va duce la mbuntirea performanei ncrcrii precum i la utilizarea
mai eficient a spaiului alocat indexului.
?