S-au descris indexuri grupate și non-grupate

  • 02/11/2019
  • 4 minute de citit
    • M
    • M
    • C
    • M
    • r
    • +9

Se aplică la: SQL Server (toate versiunile acceptate) Azure SQL Database

Un index este o structură pe disc asociată cu un tabel sau o vizualizare care accelerează recuperarea rândurilor din tabel sau din vizualizare. Un index conține chei construite dintr-una sau mai multe coloane din tabel sau vizualizare. Aceste chei sunt stocate într-o structură (arborele B) care permite SQL Server să găsească rapid sau eficient rândul sau rândurile asociate cu valorile cheii.

Un tabel sau o vizualizare poate conține următoarele tipuri de indici:

  • Clusterizat

    • Indexurile grupate sortează și stochează rândurile de date în tabel sau vizualizare pe baza valorilor cheie ale acestora. Acestea sunt coloanele incluse în definiția indexului. Poate exista un singur index grupat pe tabel, deoarece rândurile de date în sine pot fi stocate într-o singură ordine.
    • Singura dată când rândurile de date dintr-un tabel sunt stocate în ordine sortată este atunci când tabelul conține un index grupat. Când un tabel are un index grupat, tabelul se numește tabel grupat. Dacă un tabel nu are index grupat, rândurile sale de date sunt stocate într-o structură neordonată numită heap.
  • Nonclustered

    • Indicii non-grupați au o structură separată de rândurile de date. Un index nonclustered conține valorile cheii index nonclustered și fiecare intrare a valorii cheii are un pointer către rândul de date care conține valoarea cheii.

    • Pointerul dintr-un rând index într-un nonclustered indexul către un rând de date se numește localizator de rânduri. Structura localizatorului de rânduri depinde de faptul dacă paginile de date sunt stocate într-o grămadă sau într-un tabel grupat. Pentru o grămadă, un localizator de rânduri este un indicator către rând. Pentru un tabel grupat, localizatorul de rânduri este cheia de index grupată.

    • Puteți adăuga coloane nonkey la nivelul frunzei indexului non-cluster pentru a ocoli limitele cheilor de index existente, și executați interogări complet acoperite, indexate. Pentru mai multe informații, consultați Crearea indexurilor cu coloane incluse. Pentru detalii despre limitele cheilor de index, consultați Specificațiile capacității maxime pentru SQL Server.

Atât indexurile clusterizate, cât și cele non-clusterizate pot fi unice. Aceasta înseamnă că niciun rând nu poate avea aceeași valoare pentru cheia index. În caz contrar, indexul nu este unic și mai multe rânduri pot partaja aceeași valoare cheie. Pentru mai multe informații, consultați Crearea indexurilor unice.

Indexurile sunt întreținute automat pentru o tabelă sau pentru vizualizare ori de câte ori datele tabelului sunt modificate.

Consultați indexuri pentru tipuri suplimentare de indici cu scop special. / p>

Indexuri și constrângeri

Indexurile sunt create automat atunci când constrângerile PRIMARY KEY și UNIQUE sunt definite pe coloanele tabelului. De exemplu, atunci când creați un tabel cu o constrângere UNICĂ, Motorul de baze de date creează automat un index non-grupat. Dacă configurați o CHEIE PRIMARĂ, Motorul de baze de date creează automat un index clusterizat, cu excepția cazului în care există deja un index clusterizat. Când încercați să impuneți o constrângere PRIMARY KEY pe o tabelă existentă și un index grupat există deja pe tabela respectivă, SQL Server impune cheia primară folosind un index non-cluster.

Pentru mai multe informații, consultați Creare chei principale și Creați constrângeri unice.

Modul în care indexurile sunt utilizate de Optimizatorul de interogări

Indicii bine concepuți pot reduce operațiunile I / O pe disc și pot consuma mai puține resurse de sistem, îmbunătățind astfel performanța interogării. Indexurile pot fi utile pentru o varietate de interogări care conțin instrucțiuni SELECT, UPDATE, DELETE sau MERGE. Luați în considerare interogarea SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 din baza de date AdventureWorks2012. Când se execută această interogare, optimizatorul de interogare evaluează fiecare metodă disponibilă pentru recuperarea datelor și selectează cea mai eficientă metodă. Metoda poate fi o scanare a unui tabel sau poate fi scanarea unuia sau mai multor indici, dacă există.

Atunci când efectuați o scanare a unui tabel, optimizatorul de interogare citește toate rândurile din tabel și extrage rândurile care se întâlnesc criteriile interogării. O scanare a tabelului generează multe operații de I / O pe disc și poate necesita resurse mari. Cu toate acestea, o scanare a unui tabel ar putea fi cea mai eficientă metodă dacă, de exemplu, setul de rezultate al interogării este un procent ridicat de rânduri din tabel.

Când optimizatorul de interogare folosește un index, acesta caută în coloane cheie index, găsește locația de stocare a rândurilor necesare pentru interogare și extrage rândurile potrivite din acea locație. În general, căutarea în index este mult mai rapidă decât căutarea în tabel deoarece, spre deosebire de un tabel, un index conține frecvent foarte puține coloane pe rând, iar rândurile sunt în ordine sortată.

Optimizatorul de interogare selectează de obicei cea mai eficientă metodă la executarea interogărilor. Cu toate acestea, dacă nu sunt disponibili indici, optimizatorul de interogare trebuie să utilizeze o scanare de tabel. Sarcina dvs. este să proiectați și să creați indexuri care se potrivesc cel mai bine mediului dvs., astfel încât optimizatorul de interogare să aibă o selecție de indici eficienți din care să selectați. SQL Server oferă consilierul pentru reglarea motorului bazei de date pentru a vă ajuta cu analiza mediului dvs. de baze de date și la selectarea indexurilor corespunzătoare.

Important

Pentru mai multe informații despre liniile directoare privind proiectarea indexului și elementele interne, consultați Ghidul de proiectare a indexului SQL Server.

  • Ghidul de proiectare a indexului SQL Server
  • Creați indexuri clusterizate
  • Creați noncluster Indici

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *