Mar 29 2007

Index clustered si non-clustered

Categorie: Clustered | Index | Nonclustered | SQL Server | DBACatalin Dumitru @ 08:48

SQL Server este un domeniu foarte vast şi majoritatea sunt grabiţi în a parcurge cât mai mult din documentaţii astfel uneori pot trece peste câteva lucruri de bază cum ar fi indecşii clustered sau non-clustered. SQL Server 2005 oferă două tipuri de indecşi clustered si non-clustered. Din definiţie se poate spune ca un index clustered este un index care stochează datele ce formează indexul iar un index non-clustered reţine doar un pointeri (adrese de memorie la care se găsesc datele).

O tabelă poate conţine doar un index clustered şi până la 249 de indecşi non-clustered. Principalul motiv pentru care se utilizează un index este acela de a se putea accesa mai rapid datele pe care o interogare încearcă să le acceseze. Acest index poate să fie atât clustered cât şi non-clustered. Fără un index, SQL Server ar trebui să parcurgă întreaga tabelă până ajunge la rândul care trebuie accesat sau chiar să parcurgă întreaga tabelă. Acest lucru se poate evidenţia cu ajutorul planului de interogare (execution plan) care va utiliza Index Seek (dacă există index) sau Table Scan (dacă nu există).

 Ca metodă de practică ar fi să utilizez index clustered dar numai acolo unde indexul este o coloană ce conţine date, totuşi sunt limitat la un singur astfel de index în fiecare tabelă. O a doua metodă ar fi indexarea tuturor coloanelor dar ar conduce la supraindexare şi ar fi greu de întreţinut toţi indecşi mai ales când se lucrează cu multe instrucţiuni de actualizare (insert, update, delete).

Ca sfat, se poate spune că este mai bine să se creeze index non-clustered acolo unde coloana intră în setul de rezultate pentru că accesarea paginilor de date este mai înceată.

Ca instrumente de depistare a cazurilor în care indexarea nu este corespunzătoare (prea puţin indexată sau supraindexată), se poate utiliza Database engine Tuning Advisor

Etichete: , , , ,