Indexul Baza de date - viață-prog
arhitectură
Există două tipuri de indici: grupate și non-cluster. Fiecare tabel poate avea doar un singur indice de cluster și multe non-cluster. În prezența unui cluster rândurile tabelei de index sunt stocate fizic într-o ordine predeterminată și sunt direct legate de indicele elementelor, astfel accelerând considerabil accesul la date în performanța interogărilor care utilizează indexul. Dacă tabelul nu are un index cluster, masa este dezorganizat. Indexul non-creat pentru grupată un tabel care conține un pointer la intrarea de masă, și, prin urmare, atunci când eșantionul trebuie să fie mai cel puțin un disc de acces pentru a obține numele tabelei de intrare.
Indecși poate fi aplicat în mod fizic în diferite structuri. Cele mai frecvente B + copaci, tabele de dispersie.
Secvența de coloane într-un indice compozit
Secvența în care coloanele sunt reprezentate într-un index pliat suficient de important. Faptul este că, pentru a obține un set de date la cerere care afectează doar primul de coloane indexate, puteți. Cu toate acestea, în cele mai multe baze de date este de achiziție de date imposibilă sau ineficientă pentru a doua, etc. Numai coloane indexate (fără a se limita la primul).
eficacitate
Pentru indexurile optime de performanță sunt, de obicei create interogări de pe coloanele de masă, care sunt frecvent utilizate în interogări. Pentru un singur tabel pot fi create de mai mulți indici. Cu toate acestea, creșterea numărului de indici încetinește adăuga, actualiza, șterge rânduri dintr-un tabel, deoarece este necesar să se actualizeze indicii înșiși. În plus, indicii au memorie suplimentară, astfel încât înainte de a crea indexul trebuie să vă asigurați că câștigul, care este planificat în performanță de interogare depășesc costurile suplimentare ale resurselor informatice pe suport de index.
restricţii
Indexuri sunt utile pentru multe aplicații, dar sunt impuse restricții de utilizare a acestora. Luați în considerare această interogare SQL. SELECT first_name de la oameni UNDE last_name = 'Frankenstein';. Pentru a efectua o astfel de solicitare, fără o bază de date index este de a verifica câmpul last_name în fiecare rând (acest mecanism este cunoscut sub numele de „căutare completă“ sau „tabel de scanare completă“, pot fi afișate în ceea ce privește cuvântul «NATURAL»). Atunci când se utilizează un indice de bază de date, pur și simplu trece prin arborele binar până găsește un record de trecere „Frankenstein“ .Such necesită mult mai puține resurse decât o căutare exhaustivă a tabelului.
Acum, să ia această interogare: SELECT EMAIL_ADDRESS de la clienți UNDE EMAIL_ADDRESS LIKE '% @ yahoo.com';. Această solicitare trebuie să găsim toți clienții ale căror e-mail se termină cu „@ yahoo.com», cu toate acestea, chiar și în cazul în care coloana este baza de date indicele EMAIL_ADDRESS va utiliza în continuare o căutare exhaustivă a tabelului. Acest lucru se datorează faptului că indicii se bazează pe ipoteza că cuvintele / caracterele merg de la stânga la dreapta. folosind un caracter wildcard la începutul căutării mele pentru baza de date elimină posibilitatea de a folosi un arbore binar de căutare. Această problemă poate fi rezolvată prin crearea unui index suplimentar în cuvintele invers (EMAIL_ADDRESS) și interogați punctele de vedere În acest caz, wildcard-ul va fi în poziția cea mai din dreapta ( «moc.oohay%»), care nu exclude utilizarea unui index, selectați EMAIL_ADDRESS inversă de la clienți în cazul în care inversa (EMAIL_ADDRESS) cum ar fi inversă ( „% @ yahoo.com“); (.: EMAIL_ADDRESS).