Structuri de indecși

22
STRUCTURI DE INDECȘI

description

Structuri de indecși. Introducere. Mecanismele de indexare sunt utilizate pentru a mari viteza accesului la datele dorite. Exemplu: O structură de index pentru un fișier al bazei de date funcționează într-o manieră asemenătoare indexului unui cărți. Există două tipuri de indecși: - PowerPoint PPT Presentation

Transcript of Structuri de indecși

Page 1: Structuri de indecși

STRUCTURI DE INDECȘI

Page 2: Structuri de indecși

INTRODUCERE

Mecanismele de indexare sunt utilizate pentru a mari viteza accesului la datele dorite. Exemplu: O structură de index pentru un fișier al

bazei de date funcționează într-o manieră asemenătoare indexului unui cărți.

Există două tipuri de indecși: Indecși ordonați-valorile sunt ordonate. Indecși dispersați-valorile sunt distribuite uniform

în cadrul unui grup pe baza unei funcții de dispersie.

Page 3: Structuri de indecși

CONCEPTE DE BAZĂ

Cheie de căutare - un atribut (sau un set de atribute) folosit pentru a căuta înregistrările într-un fișier.

Cheia de căutare este diferită de cheia primară sau cheia candidat sau supercheia

Fișierul de index este de dimensiune mult mai mică decât fișierul original.

Fișierul index conține înregistrări de forma:

cheie de căutare pointer

Page 4: Structuri de indecși

METRICI DE EVALUARE A INDECȘILOR

Tipurile de acces: tipurile de acces care sunt suportate eficient.

Timpul de acces: timpul necesar căutării unor date.

Timpul de inserare: timpul necesar inserării unei noi date; aceasta include timpul necesar inserării corecte a noii date împreună cu timpul necesar modificării structurii de index.

Timpul de ștergere: timpul necesar ștergerii unei date; aceasta include timpul necesar ștergerii datei respective împreună cu timpul necesar modificării structurii de index.

Spațiul ocupat de index

Page 5: Structuri de indecși

INDECȘI ORDONAȚI

Fiecare structură de index este asociată cu o cheie de căutare. Înregistrările dintr-un fișier indexat ordonat sunt ordonate după cheia de căutare.

Un fișier poate avea mai mulți indecși asociați cu mai multe chei de căutare.

Index grupat (clustering index) este indexul a cărui cheie de căutare definește chiar ordinea în fișierul de date. Indecșii grupați sunt numiți și indecși primari; Cheia indexului primar este de obicei, dar nu necesar,

cheia primară a fișierului. Indecși secundari - Indecșii a căror cheie de

căutare este diferită de cheia după care este ordonat fișierul.

Page 6: Structuri de indecși

INDECȘI DENȘI ȘI RARI

Indecși denși: există o înregistrare în fișierul de index pentru

fiecare cheie de căutare din fișier; restul înregistrărilor cu aceeași valoare a cheii

sunt stocate secvențial după prima înregistrare.

Page 7: Structuri de indecși

INDECȘI DENȘI ȘI RARI

Indecși rari: o înregistrare din fișierul de index apare numai pentru anumite valori ale cheii de căutare.

Pentru a localiza o înregistrare din fișier cu valorea cheii de cautare K: se caută intarea din index cu valoarea cheii de

căutare cea mai mare sau egală < K; se începe căutarea de la înregistrarea adresată

de intrarea găsită în fișierul de index, urmărind pointerii din index până la găsirea înregistrării dorite.

Page 8: Structuri de indecși

INDECȘI DENȘI ȘI RARI

Page 9: Structuri de indecși

INDECȘI MULTINIVEL

Chiar dacă se folosește index rar, fișierul index poate deveni prea mare pentru a fi procesat eficient.

Dacă indexul este suficient de mic să fie stocat în memorie, timpul de căutare a unei înregistrari este mic.

Dacă indexul este mare și trebuie stocat pe disk, o căutare pentru o anumită intrare necesită citirea a câtorva blocuri.

Căutarea binară poate fi folosită pentru a găsi intrarea dorită, dar va avea costuri destul de mari.

Page 10: Structuri de indecși

INDECȘI MULTINIVEL Exemplu: Dacă am avea un fișier cu 100000 de înregistrări,

cu 10 înregistrări în fiecare bloc, și o intrare în index fiecare bloc, fișierul index va avea 10000 de înregistrări. Inregistrările din index sunt mai mici ca dimensiune decât cele din fișier, deci presupunem că avem 100 de înregistrări index în fiecare bloc. Astfel, indexul va avea 100 de blocuri.

De exemplu, pentru b blocuri in fișierul de index, căutarea binară necesită [log2b] blocuri pentru a fi citite.

Pentru fișierul de index care conține 100 de blocuri, vor fi citite 7 blocuri; într-un sistem în care citirea unui bloc dureaza 30 milisecunde, căutarea va dura 210 milisecunde, ceea ce este mult.

Pentru a rezolva această problemă, fișierul de index poate fi tratat ca orice fișier secvențial și se poate construi un index rar pe un index grupat ca în figură.

Page 11: Structuri de indecși

INDECȘI MULTINIVEL Pentru a căuta o înregistrare, se face o căutare binară în

fișierul indexului extern pentru a găsi înregistrarea a cărei cheie de căutare are valorea cea mai mare sau egală cu cheia căutată.

Pointerul va adresa blocul din indexul interior. Se va scana acest bloc până când se găsește înregistrarea dorită.

Pointerul asociat cu această înregistrare va adresa blocul dorit din fișierul care conține înregistrarea pe care o căutăm. Folosind indexarea cu 2 nivele s-a citit numai un bloc în fișierul de index în loc de 7 blocuri. Se pot construi oricâte nivele avem nevoie.

Căutarea înregistrărilor într-un index multinivel necesită mult mai puține operații de I/O decât ar necesita căutarea binară. Fiecare nivel din index corespunde unei unități fizice de stocare.

Page 12: Structuri de indecși
Page 13: Structuri de indecși

MODIFICAREA INDECSILOR-INSERAREA Inserarea. Prima dată, sistemul efectuează o căutare folosind

cheia de căutare care apare în înregistrarea care trebuie inserată. Acțiunile pe care sistemul trebuie să le ia sunt: Dacă indexul este dens:

1. Dacă cheia de căutare nu apare in îndex, sistemul inserează o înregistrare cu noua cheie de inserare în poziția potrivită.

2. Altfel, înregistrarea din index memorează un pointer la prima înregistrare din fișier cu valoarea cheii de căutare. Sistemul plasează noua înregistrare după celelalte înregistrări cu aceeași valoare a cheii de căutare.

Dacă indexul este rar: indexul memorează o intrare pentru fiecare bloc.

Dacă sistemul creează un nou bloc, se inserează prima cheie de căutare din bloc în fișierul de index.

Pe de altă parte dacă noua înregistrare are cea mai mică cheie de căutare din bloc, sistemul trebuie să modifice fișierul de index. Dacă nu, sistemul nu face nici o modificare.

Page 14: Structuri de indecși

MODIFICAREA INDECSILOR-ȘTERGEREA Pentru a șterge o înregistrare, sistemul caută mai întâi

înregistrarea care trebuie ștearsă. Operațiile pe care sistemul le va face sunt în funcție de tipul indexului: Dacă indexul este dens:

Dacă înregistrarea de șters este unică după cheia de căutare, atunci sistemul șterge înregistrarea corespunzătoare din fișierul de index.

Altfel, următoarele operații trebuie efectuate: Dacă înregistrarea din index memorează pointeri la toate

înregistrările care au aceeași cheie de căutare, sistemul șterge doare pointerul la înregistrarea care trebuie ștearsă.

Altfel, înregistrarea din index memorează un pointer numai la prima înregistrare din blocul de înregistrări care au aceeași cheie de căutare cu înregistrarea care trebuie ștearsă. În acest caz, dacă ănregistrarea de șters este prima înregistrare din bloc, sistemul modifică înregistrarea din index să adreseze următoarea înregistrare.

Page 15: Structuri de indecși

MODIFICAREA INDECSILOR-ȘTERGEREA

Dacă indexul este rar: Dacă indexul nu conține nicio înregistare cu cheia de

căutare a înregistrării de șters, atunci nu trebuie făcută nicio modificare în index.

Altfel, sistemul trebuie să facă următoarele operații: Dacă înregistrarea de șters este unică după cheia de

căutare, sistemul înlocuiește înregistrarea din index corespunzătoare cu următoarea înregistrare a următoarei chei de căutare. Dacă cheia de căutare următoare este deja inserată în fișierul de index, intrarea din index corespunzătoare înregistrării de șters este doar ștearsă fără a mai fi înlocuită.

Altfel, dacă înregistrarea din index a cheii de căutare de șters memorează un pointer chiar la înregistrarea care trebuie ștearsă, sistemul modifică înregistrarea din index să adreseze următoarea înregistrare cu aceeași valoare a cheii de căutare.

Page 16: Structuri de indecși

INDECSI SECUNDARI

Indecșii secundari trebuie să fie denși, cu o intrare în fișierul de index pentru fiecare cheie de căutare și un pointer pentru fiecare înregistrare din fișier .

Indecșii secundari au o altă structură față de indecșii grupați.

Dacă cheia de căutare a indexului grupat nu este o cheie candidat, este suficient dacă indexul adresează prima înregistrare dintr-un bloc de inregistrări, deoarece celelalte vor fi găsite secvențial.

Page 17: Structuri de indecși

INDECSI SECUNDARI În cazul indecșilor secundari, dacă cheia de căutare nu

este cheie candidat, nu este suficient ca indexul să adreseze prima înregistrare a unui bloc de înregistrăre, deoarece celelalte înregistrări cu aceeași valoare a cheii de căutare pot fi oriunde în fișier; înregistrările din fișierul de date sunt ordonate numai după cheia de căutare a indexului grupat, și nu după cheia de căutare a indexului secundar.

Astfel, indecșii secundari trebuie să conțină pointeri la toate înregsitrările din fișierul de date.

Pentru a implementa indecșii secundari a căror cheie de căutare nu este cheie candidat, se poate folosi un nivel intermediar de indirectare. Astfel, pointerii indexului nu adresează direct înregistrările din fișier, ci un bloc care conține pointeri la fișier.

Page 18: Structuri de indecși
Page 19: Structuri de indecși

INDECSI ARBORI B+ Dezavantajul folosirii indecșilor organizați în fișiere

secvențiale este aceea a scăderii performanței odată cu creșterea fișierului de date și a celui de index.

Structura de arbore B+ a indexului este cea mai răspândită datorită faptului că indecșii astfel construiți iși mențin eficiența în ciuda inserărilor și ștergerilor din fișierul de date.

Indexul B+ va fi un arbore echilibrat în care fiecare cale de la rădăcina arborelui la frunze are aceeași lungime.

Micile dezavantaje ale indecșilor cu structură de arbori B + sunt multiplele inserări și ștergeri și dimensiunea mare a spațiului alocat necesar indexului.

Page 20: Structuri de indecși

STRUCTURA FISIERELOR DE INDEX B+ Un index cu structură de arbore B+ este multinivel, dar

organizarea lui diferă de cea a indecșilor multinivel secvențial prezentați

Structura: Fiecare cale de la rădăcina arborelui la frunze are aceeași

lungime Un nod care nu este frunză are între n/2și n copii, unde n este

fixat pentru un arbore particular. Un nod frunză are între (n–1)/2 și n–1 valori. Dacă rădăcina nu este frunză are cel puțin 2 copii. Dacă rădăcina este frunză are între 0 și (n–1) valori. Nodul frunză are următoarele proprietăți: pointerii Pi (i = 1, 2, . . ., n–1 ) adresează fie câte o înregistrare

din fișierul de date cu valoarea cheii de căutare egală cu Ki, sau dacă cheia de căutare nu este cheie candidat, un bloc de pointeri la înregistrările din fișier cu valoarea cheii de căutare egala Ki

Pn adresează frunza care urmează în ordinea cheii de căutare.

Page 21: Structuri de indecși
Page 22: Structuri de indecși

INDECȘI CU CHEI MULTIPLE DE ACCES Indecșii cu chei multiple sunt folosiți în următoarele tipuri de interogări: Exemplu:select nrCont from Cont where Filiala = “ING1” and Balanta = 1000 Posibilitățile pentru a procesa această interogare folosind index definit

pe un singur atribut sunt:1. Se definește indexul după atributul Filiala pentru a căuta conturile cu numele ING1 și se testează dacă Balanta =1000. 2. Se definește indexul după atributul Balanta pentru a căuta conturile cu balanțele de 1000 euro și se testează dacă Filiala = “ING1”.3. Se folosește indexul după atributul Filiala pentru a găsi pointerii la înregistrările care au filiala “ING1”. De asemenea, se folosește indexul după atributul Balanta = 1000. Se ia rezultatul intersecției celor două mulțimi de înregistrări. Cheile de căutare compuse conțin mai mult de un atribut: De exemplu: (Filiala, Balanta). Relația de ordonare: (a1, a2) < (b1, b2) înseamnă:

a1 < b1, or

a1=b1 și a2 < b2