Sunteți pe pagina 1din 70

BAZE DE DATE

Indeci

Mihaela Elena Breabn


FII 2014-2015

Indeci
Cuprins
Stocarea fizica a datelor
Indexare - motivatie
Indeci ordonai

Indeci secveniali
B+-Arbori

Hashing

Hashing static
Hashing dinamic

Acces multi-cheie i Indeci Bitmap


Definirea indecilor n standardul SQL
Indeci n Oracle

Stocarea fizica a datelor

Viteza de citire a unui bloc este data de:


Viteza de miscare a bratului (pozitionare pe cilindru)
Viteza de rotatie a platanelor
Timpul de transfer

Indexare - Motivaie
Bazele de date consum mult timp cutnd

SELECT * FROM Student


WHERE sID=40;
Cum putem regsi rezultatul n urmtoarele situaii:
a) Ordine aleatoare a datelor

b) Date secveniale/ordonate

sID

sNume medie

sID

sNume medie

20

Ioana

9.5

10

Tudor

8.55

40

Andrei

8.66

20

Ioana

9.5

10

Tudor

8.55

30

Maria

8.33

30

Maria

8.33

40

Andrei

8.66

70

Alex

9.33

70

Alex

9.33

Indexare Motivaie
Cutarea binar

Complexitate: log2(N)
(log2(100 000)=17)

SELECT * FROM Student


WHERE sNume=Ioana;
Cum putem rezolva si aceasta interogare eficient?
Solutia: Construirea unei structuri auxiliare care s ajute la localizarea unei
nregistrri

Mecanismele de indexare sunt utilizate pentru a mri viteza de acces la datele


dorite

Concepte de baz
Un index este asociat cu o cheie de cutare = atribut sau set de atribute
dintr-un fiier/tabel/relaie utilizate pentru a cuta nregistrri n fiier
Fiier index const din nregistrri index de forma

valoare cheie de cutare

pointer

Fiier de date secventa de blocuri de memorie ce contine inregistrarile


unui tabel
Sortare:
a indexului pe baza cheii de cutare
a fiierului/tabelei/relaiei stocate -> cheie de sortare = atribut care da
ordonarea fisierului de date

Un fiier de date poate avea asociai mai muli indeci


Fiierele index sunt de obicei de dimensiuni mult mai mici dect fiierul
original cu date

Metrici de evaluare a indecilor


Timpul de acces
Timpul de inserare
Timpul de tergere
Spaiul necesar
Tipurile de acces suportate eficient influeneaz alegerea indexului

nregistrri cu o valoare specificat a atributului


nregistrri cu valoarea atributului inclus ntr-un interval specificat

Tipuri de indeci

Indeci ordonai: valorile cheii de cutare sunt stocate ntr-o


anumit ordine

Indeci hash: valorile cheii de cutare sunt distribuite uniform


n bucket-uri cu ajutorul unei funcii hash

Bucket: o unitate de stocare coninnd una sau mai multe nregistrri

Indeci bitmap: asociai cheilor de cutare de tip atribute


discrete, codifica distribuia valorilor sub form de matrice
binar

Indecsi ordonati:
fisiere secventiale

Indeci secveniali (fisiere secventiale)

Intrrile index sunt sortate dup cheia de cutare


Ex: catalogul cu autori ntr-o bibliotec

Index primar: indexul a crui cheie de cutare definete i ordonarea


secvenial a fiierului/tabelei/relaiei
denumit i index de grupare (clustering/clustered index)
cheia de cutare a unui index primar este de obicei cheia primar dar nu
e obligatoriu
o tabel poate avea cel mult un index primar
Index secundar (nonclustering/nonclustered): index a crui cheie de cutare
specific o ordonare diferit de ordonarea secvenial a fiierului cu date
Fiier index-secvenial: combinaia fiier ordonat secvenial cu un index
primar

10

Fiiere index dense

Index dens: exist nregistrri index pentru fiecare valoare a cheii de


cutare n fiier/tabel/relaie
Dac indexul e primar va pstra cte un singur pointer-doar la prima
intrare cu valoarea respectiv
Dac indexul e secundar vor fi necesari mai muli pointeri la o singur
valoare a cheii de cutare

Index dens primar: cheia de cautare coincide cu cheia de


sortare a fisierului de date
11

Fiiere index rare

Index rar: conine intrri doar pentru unele valori a cheii de cutare

Aplicabil doar cnd nregistrrile sunt ordonate secvenial dup cheia de cutare
Balansul timp-spaiu
De obicei o intrare in index corespunde unui bloc din fisierul de date

Pentru a localiza o nregistrare cu valoarea k a cheii de cutare:

Se determin nregistrarea index cu cea mai mare valoare a cheii de cutare <k
Se caut secvenial n fiier ncepnd cu nregistrarea spre care indic
nregistrarea index

Index rar: cheia de cautare coincide obligatoriu cu cheia


de sortare a fisierului de date
12

Indeci multi-nivel

Index multi-nivel: index asociat unui alt index


Dac indexul primar nu ncape n memorie accesul devine costisitor
Soluia: indexul primar pstrat pe disc este tratat ca un fiier secvenial i
se construiete un index rar pentru el
Indexul extern un index rar al indexului primar
Index intern fiierul index primar

Dac i indexul extern este prea mare pentru a ncpea n memorie, se


creeaz un index pe un nou nivel, etc

Indecii de pe toate nivelele trebuiesc actualizai la inserare i tergere n


fiierul cu date

13

Indeci multi-nivel

14

Indeci secundari

n relaia Studenti sortat dup nume, care sunt studentii ce locuiesc in Cluj?
Soluia: index secundar (dens!)
Pentru a implementa relaia de tip unu-la-multi dintre index i datele
destinaie se utilizeaz referine la bucket-uri de pointeri

15

Actualizarea indecilor secveniali


tergere

Stergerea inregistrarii din fisierul cu date atrage modificari asupra indexului


Dac nregistrarea tears este singura care conine o valoare particular a
cheii de cutare, aceasta este tears i din index

tergerea n

16

Indeci deni: similar tergerii din fiierul cu date


Indeci rari:

dac exist o intrare a cheii de cutare n index aceasta este nlocuit cu urmtoarea
valoare a cheii de cutare din fiier (n ordinea cheii de cutare)

dac urmtoarea valoare a cheii de cutare deja are o intrare n index, este efectuat
tergerea.

Actualizarea indecilor secveniali


Inserare

Este necesar localizarea valorii cheii de cutare ce apare n tuplul inserat


Indeci deni: dac valoarea nu apare n index se va insera
Indeci rari: dac indexul pstreaz o intrare pentru fiecare bloc al fiierului
nu sunt necesare modificri dect dac un nou bloc este creat (prima
valoare a cheii de cutare ce apare n noul bloc este inserat n index)

Inserarea in fisierul cu date ordonat si in indexul secvential poate necesita


crearea unor blocuri de exces -> degenerarea structurii secventiale

Inserarea (i tergerea) pentru indeci multi-nivel sunt extensii simple a


algoritmilor uni-nivel prezentai

17

Indecsi ordonati:
B+-arbori

18

Fiiere index de tip B+-arbori


Motivaie

Organizarea secvenial a indecilor se degradeaz pe msur ce


dimensiunea crete

Reconstruirea indecilor la intervale de timp e necesar ns costisitoare

Indexul B+-arbore
mrete viteza de localizare i elimin necesitatea constant de
reorganizare
utilizai extensiv

19

Structura B+-arbore
(1)

Un arbore balansat astfel nct fiecare drum de la rdcin la frunze are


aceeai lungime
Un nod tipic

Ki sunt valori a cheii de cutare

Pi sunt pointeri ctre


noduri copil/descendente (noduri care nu sunt frunze)

nregistrri sau bucket-uri de nregistrri (noduri frunz)

Arborele este definit de o constant m care specific numrul maxim de


valori dintr-un nod (numarul maxim de pointeri /descendenti este m+1)

De obicei dimensiunea unui nod e cea a unui bloc

Valorile cheii de cutare ntr-un nod sunt ordonate


K1 < K2 < K3 < . . . < Km

20

Noduri care nu sunt frunze n B+-arbore

formeaz un index rar multi-nivel pentru nodurile frunz


Pentru un nod cu n pointeri:

21

Toate valorile cheii de cutare din subarborele spre care P1 indic sunt
mai mici dect K1
Pentru Pi, 2 i n 1, toate valorile cheii de cutare din subarborele
spre care indic sunt mai mari sau egale cu Ki1 i mai mici dect Ki
Toate valorile cheii de cutare din subarborele spre care indic Pn sunt
mai mari sau egale cu Kn1

Structura B+-arbore
(2)

Nodurile nu sunt complet ocupate pt. a evita reorganizari frecvente:

nodul radacina are cel putin doi si cel mult m + 1 pointeri/descendenti (corespunzator,
cel putin una si cel mult m valori, ordonate crescator)
fiecare nod de pe un nivel intermediar are cel putin (m+1)/2 si cel mult m + 1
pointeri/descendenti (corespunzator, cel putin m/2 si cel mult m valori ordonate
crescator)

fiecare nod frunza are cel putin m/2 si cel mult m valori; toti pointerii fac trimitere catre
fisierul de date, cu exceptia ultimului pointer care face trimitere catre urmatorul nod
frunza (cu valori mai mari).

22

B+-arbore
Exemplu

1 bloc memorie = 1024 octeti


Cheia de cautare = sir de max. 20 caractere (1 caracter=1octet)
1pointer = 8 octeti

Numarul maxim de intrari in nod?

Cea mai mare valoare m cu proprietatea 20m + 8(m + 1) <= 1024.


m=36

Radacina: cel putin una, cel mult 36 valori

Nod intermediar: cel putin 19, cel mult 37 pointeri


Nod frunza: cel putin 18, cel mult 36 valori = pointeri catre fisierul
de date

23

B+-arbori
Observaii

Fiindc conexiunile dintre noduri se realizeaz prin pointeri, blocuri


apropiate logic nu trebuie s fie apropiate i fizic
Nivelele diferite de nivelul frunz formeaz o ierarhie de indeci rari
Ultimul nivel = index secvential dens
B+-arborele conine un numr relativ mic de nivele

Cel mult log(m+1)/2(K) pentru k valori a cheii de cutare

Nivelul imediat urmtor rdcinii: cel puin 2 noduri

Urmatorul: 2* (m+1)/2 noduri

Urmtorul: cel puin 2* (m+1)/2 * (m+1)/2

etc

Inserrile i tergerile se fac eficient, restructurarea indexului necesitnd


timp logaritmic

24

Interogri pe B+-arbori
Algoritm
Determinarea tuturor nregistrrilor cu valoarea k a cheii de cutare
1.
N=rdcina
2.
Repet
Caut n N cea mai mic valoare a cheii de cutare >k

Dac aceasta exist i e egal cu Ki, atunci N = Pi

Altfel N = Pn (k Kn1)
Pn N este nod frunz

Dac exist Ki = k, pointerul Pi indic nregistrarea dorit


Altfel nu exist nregistrarea cu cheia de cutare k

3.
4.

25

Interogari

Cheia de cauare - stocheaza numerele impare intre 1-19


Intrarea 15?

26

Interogri pe B+-arbori
Observaii

Ex:

Un nod este n general de aceeai dimensiune ca a unui bloc pe disc - 4Kbytes


Pp. m=100
Fiecare acces al unui nod poate necesita o localizare pe disc (<20 milisecunde)

Pentru 1 milion valori a cheii de cutare, cte noduri (blocuri pe disc) sunt
accesate la o cutare n B+-arbore? (4)
Dar dac se utilizeaz un index secvenial? (20)

27

Actualizri n B+-arbori
Inserarea
Determin nodul frunz n care va aprea valoarea cheii de cutare
Dac valoarea e deja prezent ntr-un nod frunz

1.
2.
1.
2.

Adaug nregistrarea n fiier/tabel/relaie


Adaug un pointer n bucket

Dac nu e prezent valoarea

3.
1.
2.
3.

28

Adaug nregistrarea n fiier/tabel/relaie


Dac e loc n nodul frunz insereaz perechea (valoare cheie, pointer)
Altfel divide nodul

Actualizri n B+-arbori
Inserarea: divizarea nodurilor

Divizarea unui nod frunz


1.
Se iau cele n perechi (inclusiv cea care urmeaz a fi inserat) ordonate.
n nodul original se pun primele n/2 perechi iar restul ntr-un nod
nou
2.
Fie p noul nod i k cea mai mic valoare din p. Insereaz (k,p) n
printele nodului care se divide
3.
Dac printele este plin acesta se divide la rndul su i divizarea se
propag n sus pn cnd un nod nu este plin. n cel mai ru caz nodul
rdcin este divizat ceea ce crete nlimea arborelui cu 1.
Divizarea unui nod plin intern N la inserarea unei perechi (k,p)
1.
Se creeaz un nod temporar M cu spaiu pentru n+1 pointeri i n
valori n care se copie N i perechea (k,p)
2.
Se copie P1,K1, , K n/2-1,P n/2 din M napoi n N
3.
Se copie Pn/2+1,K n/2+1,,Kn,Pn+1 din M ntr-un nou nod N
4.
Insereaz (K n/2,N) n printele lui N
29

Actualizri n B+-arbori
Inserarea: Exemplu
Inseram valorile 14 si 16

30

Actualizri n B+-arbori
Inserarea: Exemplu(2)
Inseram valorile 8 si 10

31

Actualizri n B+-arbori
tergerea
1.
2.

3.

4.

terge nregistrarea din fiier/tabel/relaie


Dac nregistrarea face parte dintr-un bucket, e tears din acesta. Altfel
(sau dac bucketul devine gol) terge din nodul frunz perechea (pointer,
valoare cheie)
Dac nodul va avea prea puine intrri n urma tergerii i ele ncap ntrun nod vecin va avea loc unirea:
1.
Se insereaz toate intrrile n nodul stng i se terge cellalt
2.
Se terge perechea (Ki1, Pi), unde Pi este pointerul ctre nodul ters
de la printe. Dac e necesar se propag tergerea recursiv n sus. Dac
nodul rdcin rmne cu un singur pointer va fi ters.
Altfel, dac nodurile nu ncap n vecin se redistribuie pointerii:
1.
Se redistribuie astfel nct avem satisfcut condiia de minim n
ambele noduri
2.
Se actualizeaz valoarea cheii de cutare corespunztoare n
printe
32

Actualizri n B+-arbori
tergerea: Exemplu (1)
Stergem valorile 17 si 19

33

Actualizri n B+-arbori
tergerea: Exemplu (2)
Stergem valorile 5 si 7

34

B+-arbori
Eficiena

Cutare: cel mult log(m+1)/2(K) blocuri transferate

Datorit nlnuirii nodurilor frunz sunt eficieni i pt. Cutri n interval

Inserare, stergere: cel mult 2 log(m+1)/2(K) blocuri transferate

35

Organizarea fiierelor B+-arbore

B+-arborii pot fi utilizai direct pentru organizarea fiierului i


nu doar pentru indexare

36

Nodurile frunz stocheaz nregistrri i nu pointeri


Pentru a mbunti utilizarea spaiului sunt implicai mai muli vecini n
redistribuire pentru a evita divizarea sau unirea
2n / 3

Indeci B-arbore

Asemntori B+-arborilor ns permit o singur apariie a


valorilor cheilor de cutare
Cheile de cutare n nodurile care nu sunt frunz nu mai apar
nicieri n arbore ceea ce necesit introducerea unui pointer
adiional

Pointerii Bi sunt pointeri ctre nregistrri sau bucketuri

37

Indeci B-arbore
Exemplu

38

Indeci B-arbore
Observaii

Avantaje

Dezavantaje

Pot utiliza mai puine noduri dect B+-arborele corespunztor


E posibil a se localiza valoarea cutat nainte de a ajunge la frunze
Nodurile care nu sunt frunze sunt mai mari ceea ce necesit reducerea
numrului de valori stocate; nlimea va fi mai mare
Inserrile i tergerile sunt mai complicate
Implementarea e mai dificil
Nu e posibil a fi scanat un tabel doar cu ajutorul frunzelor

Avantajele nu cntresc mai mult dect dezavantajele, B+arborii fiind preferai de ctre SGBD-uri

39

Indecsi ordonati:
indecsi multi-cheie

40

Acces multi-cheie

Pot fi utilizai mai muli indeci la o interogare


SELECT *
FROM studenti
WHERE judet = 'Bihor' AND an > 2010;

Strategii posibile pentru utilizarea indecilor uni-atribut:

Utilizarea indexului cu cheia de cutare judet


Utilizarea indexului cu cheia de cutare an
Utilizarea ambilor i efectuarea interseciei

Dezavantaje:

41

Pot exista multe nregistrri ce satisfac numai una dintre condiii

Indeci multi-cheie

Cheile de cutare compuse sunt chei ce conin mai mult de un atribut


Ordinea lexicografic: (a1, a2) < (b1, b2) dac
a1 < b1sau
a1=b1 i a2 < b2
Ex. (judet, an)
Pot fi rezolvate eficient condiiile de mai jos?
a)
where judet = 'Bihor' AND an > 2010
b)
where judet > 'Bihor' AND an = 2010

42

Eficiena

Ordinea atributelor ntr-un index multi-cheie este foarte


important
Eficiena depinde de selectivitatea atributelor

43

k-d arbori

Generalizare a arborelui binar de cautare:

44

k= nr. de atribute ce formeaza cheia de cautare


Fiecare nivel corespunde unui atribut din cele k
Succesiunea nivelelor reprezint iterri peste mulimea celor k
atribute
Pentru a obine arbori echilibrai, la nivelul fiecrui nivel n
noduri este pus valoarea median

Organizarea hash/Indecsi hash

45

Hashing

n organizarea de tip hash a fiierului/tabelului/relaiei


nregistrrile sunt grupate n bucketuri care pot fi localizate pe
baza valorilor cheii de cutare (un bucket ia dimensiunea unui
bloc)
Funcia hash (de dispersie) h:K->B este o funcie de la
mulimea valorilor cheii de cutare la mulimea adreselor
tuturor bucketurilor

Localizeaz nregistrrile pentru acces, inserare, tergere

nregistrri cu valori diferite ale cheii de cutare pot fi mapate


la acelai bucket

46

Cutare secvenial n bucket

Funcii hash

Cerine

Uniformitate
Caracter aleatoriu

Funciile hash tipice au la baz calcule pe reprezentarea binar intern a


cheii de cutare
Pot aprea situaii de depire a bucketului, caz n care se utilizeaz
bucketuri de exces

47

Organizarea de tip hash


Exemplu

Organizarea de tip hash utiliznd nume drept cheie:


Funcia hash: h:Dom(nume)->{0,1,2,3} - suma reprezentrilor binare modulo 4

'Acatrinei:
'1000001 1100011 1100001 1110100 1110010 1101001 1101110 1100101 1101001'
h('Acatrinei') = 34%4 = 2.
48

Indeci hash

Organizeaz cheile de cutare cu pointerii asociai ntr-o structur de tip


hash

49

Indeci hash
Operaii

50

Cutarea:
Sandu: 01010011 01100001 01101110 01100100 01110101
h(Sandu) =20%4=0 -> scanarea bucketului 0
Inserarea:
Ionescu: 01001001 01101111 01101110 01100101 01110011
01100011 01110101
H(Ionescu)=32%4=0 -> inseram in fisierul de date si apoi in
bucketul 0 in index
tergerea: calcul hash, scanare bucket, stergere

Indeci hash
Performana

Pentru cutri punctuale, n absena coliziunilor,


localizarea unei valori necesit citirea unui singur bloc
Pentru cutri n interval indecii hash nu sunt eficienti,
deoarece trebuie calculat hashul fiecrei valori posibile

51

Hash dinamic

Funcia h mapeaz valori ale cheii de cutare la un set fix de adrese de


bucketuri.

Soluii:

Dac fiierul crete apar depiri ale bucketurilor


Daca fiierul se micoreaz spaiu este alocat inutil
Reorganizri periodice cu o nou funcie hash (costisitoare, necesit
ntreruperea operaiunilor)
Numrul de bucketuri este modificat dinamic

Hash extensibil: funcia hash e modificat dinamic

52

Genereaz valori ntr-o mulime mare, tipic ntregi pe 32 bii


La un anumit moment se utilizeaz doar un prefix al funciei hash (doar primii i
bii) al crui lungime scade sau crete dup caz

Hash extensibil
Structura general

i=2, i2 = i3 = i, i1 = i 1
53

Hash extensibil
Utilizare

Fiecare bucket j stocheaz o valoare ij

Pentru a localiz bucketul ce conine cheia de cutare Kj:

toate intrrile care indic spre bucketul j vor avea acceai valoare pe primii ij bii

Se calculeaz h(Kj) = X
Se utilizeaz primii i bii ai lui X i se urmeaz pointerul ctre bucketul potrivit

Pentru a insera o nregistrare cu cheia de cutare Kj:

54

Se localizeaz bucketul j ca mai sus


Daca este spaiu n bucket se insereaz nregistrarea
Altfel bucketul este divizat i inserarea este rencercat

Hash extensibil
Divizare bucket la inserare
Pentru a diviza bucketul j la inserarea unei valori Kj:
Dac i > ij
1.
Se aloc un nou bucket z i ij = iz = (ij + 1)
2.
Se actualizeaz a doua jumtate a tabelei de adrese a bucketurilor
pentru a indica spre z
3.
Se scot nregistrrile din j i sunt reinserate n j sau z
4.
Se recalculeaz adresa bucketului pentru Kj i se insereaz

Dac i = ij
1.
Dac se atinge o limit a lui i se utilizeaz bucketuri de exces
2.
Altfel
1.
2.
3.

55

Se incrementeaz i i se dubleaz dimensiunea tabelei de adrese


Se nlocuiete fiecare intrare n tabel cu dou intrri care indic spre acelai
bucket
Se recalculeaz adresa bucketului pentru Kj i se insereaz (acum i > ij )

Hash extensibil
tergere

Pentru a terge o nregistrare

56

Se localizeaz bucketul i se terge din el


Dac bucketul devine gol acesta este ters cu modificrile necesare n
tabela de adrese
Pot fi contopite bucketuri care au aceeai valoare pentru ij i acelai
prefix ij 1
Descreterea dimensiunii tabelei de adrese este posibil

Hash extensibil
Exemplu

structura hash iniial, dimensiune bucket = 2


57

Hash extensibil
Exemplu

Structura dup inserarea unei nregistrri Brighton i a dou nregistrri


Downtown

58

Hash extensibil
Exemplu

Dup inserarea nregistrrii Mianus

59

Hash extensibil
Exemplu

Dup inserarea a trei nregistrri Perryridge

60

Hash extensibil
Exemplu

Dup inserarea nregistrrilor Redwood i Round Hill

61

Hash extensibil
Observaii

Beneficii

Performana nu se degradeaz cu creterea fiierului


Minimizeaz consumul de memorie

Dezavantaje

Tabela de adrese a bucketurilor poate deveni foarte mare

Modificarea dimensiunii tabelei de adrese este costisitoare

n funcie de tipul interogrii:

Soluie: utilizarea unui B+-arbore pentru a localiza nregistrarea dorit n tabela de


adrese

Hashingul e indicat cnd se specific o valoare a cheii de cutare


Dac se lucreaz cu intervale de valori e mai rapid indexul ordonat

n practic:

62

Postgres suport indecii hash


Oracle suport organizarea static de tip hash, nu i indeci hash
SQLServer suport numai B+-arbori

Indecsi bitmap

63

Indeci bitmap

Proiectai pentru a trata eficient interogrile cu mai multe chei de cutare


Aplicabili pentru atribute care iau un set redus de valori distincte
Tuplele relaiei sunt considerate a fi numerotate
Structura:

Un ir de bii pentru fiecare valoare a atributului

irul are lungimea numrului de nregistrri


Valoarea 1 semnific egalitate cu valoarea creia i este asociat bitmapul

64

Indeci bitmap
Observaii

Interogrile sunt rezolvate utiliznd operatori pe bii:


Intersecia AND
Reuniunea OR
Complementarierea NOT
SELECT *
FROM studenti
WHERE judet IN ('Arad', 'Cluj') AND an <> 2010;
(Arad OR Cluj) AND NOT(2010)

Nu e necesar accesul fiierului


Utili cnd interogarea necesit numrare

Implementare eficient:

65

La tergere se prefer utilizarea unui bitmap de existen


Bitmapurile sunt mpachetate n cuvinte (tipul word) de 32 sau 64 bii
(operatorul and pe un cuvnt o singur instruciune CPU)

Definirea indecsilor in SQL

66

Definirea indecilor n SQL

Standardul nu reglementeaza, dar in practica SGBD-urile adera la aceeasi


sintaxa
Creare:

create index <index-name> on <relation-name>


(<attribute-list>)
E.g.: create index b-index on branch(branch_name)

tergere:

drop index <index-name>

Majoritatea SGBD-urilor permit specificarea tipului de index


Majoritatea SGBD-urilor creeaz implicit indecsi la specificarea
constrangerii unique
Uneori sunt generati indecsi la specificarea constrangerilor referentiale

67

Indexarea n Oracle

Oracle suport B+-arbori implicit la crearea indexului cu comanda SQL (in


documentatia Oracle apar ca B-arbori dar corespund in teorie B+-arborilor )
Indecii sunt suportai pe:

Atribute i liste de atribute


Rezultatul unei funcii peste atribute

Indeci bitmap sunt suportai cu declararea


create bitmap index <index-name> on <relation-name> (<attribute-list>)

Indeci hash nu sunt suportai dar exist suport pentru organizarea hash
static

68

Indexarea n Oracle
Considerente

Crearea indecsilor e recomandat dupa incarcarea datelor


oricand e posibil
Indexarea coloanelor potrivite:

69

Coloanele au valori (in proportie mare) unice


Dac selecia filtreaz un numr mic de tuple dintr-un tabel mare
(selectivitate ridicata ~ 15%)
Coloanele sunt utilizate in join
Coloane cu valori distincte putine -> structura bitmap
Range query (filtrare in interval) -> B+trees
Interogari punctuale frecvente: organizare hash a fisierului
Selctie cu conditii petse functii -> indecsi definiti peste functii

Bibliografie

Capitolul 11 n Avi Silberschatz Henry F. Korth S. Sudarshan.


Database System Concepts. McGraw-Hill
Science/Engineering/Math; 6 edition (January 27, 2010)

70

S-ar putea să vă placă și