Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat. Citeşte mai mult.

Un index ajută SQL Server să recupereze rapid datele din rânduri. Indexurile funcționează ca cuprinsul de la începutul cărților, permițându-vă să căutați rapid pagina pe care se află un subiect. Fără indexuri, SQL Server trebuie să scaneze toate rândurile dintr-un tabel pentru a găsi o înregistrare.

Există două tipuri de indici în SQL Server: clustered și non-clustered. Aflați diferența dintre indicii grupați și non-cluster și de ce sunt importanți.

Index în cluster în SQL Server

Într-un index grupat, rândurile de date sunt stocate fizic într-o manieră ordonată pe baza valorii cheii. Deoarece indexul include tabelul și poate aranja doar rândurile într-o singură ordine, puteți crea doar un index grupat per tabel.

În timp ce indexurile fac recuperarea rândurilor dintr-un interval mai rapidă, instrucțiunile INSERT și UPDATE

poate fi lent, deoarece optimizatorul de interogări scanează indexul în ordine până când găsește indexul țintă.

Index non-clustered în SQL Server

Un index non-cluster conține valorile cheii a căror intrare este un pointer numit locator de rând. Pentru tabelele grupate (tabelele cu un index grupat), indicatorul indică o cheie din indexul grupat care, la rândul său, indică rândul din tabel. Pentru rândurile fără un index grupat, indicatorul indică direct către rândul tabelului.

Cum se creează un index cluster în SQL Server

Când creați un tabel cu o cheie primară, SQL Server creează automat o cheie index în cluster pe baza acelei chei primare. Dacă nu aveți o cheie primară, puteți executa următoarea instrucțiune pentru a crea o cheie de index în cluster.

CREA CLUSTRATE INDEX <indexNume>
PE MASĂ <nume_tabel>(nume_coloană)

În această declarație, specificați numele indexului, numele tabelului la care să-l creați și numele coloanei de utilizat în index.

Dacă adăugați o cheie primară la un tabel care are deja un index cluster, SQL Server va crea un index non-cluster cu acesta.

Pentru a crea un index grupat care nu include coloana cheii primare, trebuie mai întâi să renunți la constrângerea cheii primare.

UTILIZAREnumele bazei de date
MODIFICAMASA nume_tabel
CĂDERE BRUSCACONSTRÂNGERE nume_pk
MERGE

Eliminarea constrângerilor cheii primare elimină, de asemenea, indexul grupat, permițându-vă să creați unul personalizat.

Cum se creează un index non-clustered în SQL Server

Pentru a crea un index non-cluster, utilizați următoarea instrucțiune.

CREAINDEX <indexNume>
PE MASĂ <nume_tabel>(nume_coloană)

De asemenea, puteți utiliza cuvântul cheie NONCLUSTERED astfel:

CREA [NECLUSTRAT] INDEX <indexNume>
PE MASĂ <nume_tabel>(nume_coloană)

Această declarație creează un index non-cluster în tabelul pe care îl specificați și include coloana pe care o indicați.

Dacă doriți, puteți sorta coloanele în ordine crescătoare (ASC) sau descrescătoare (DESC).

CREA [NECLUSTRAT] INDEX <indexNume>
PE MASĂ <nume_tabel>(nume_coloană ASC/DESC)

Ce index ar trebui să alegi?

Atât indexurile grupate, cât și cele care nu sunt în cluster îmbunătățesc timpul de interogare. Dacă majoritatea interogărilor dvs. sunt operațiuni SELECT pe mai multe coloane din tabel, indecșii grupați sunt mai rapidi. Cu toate acestea, pentru operațiunile INSERT sau UPDATE, indecșii non-cluster sunt mai rapidi, deoarece optimizatorul de interogări poate localiza coloana direct din index.

După cum puteți vedea, acești indici funcționează cel mai bine pentru diferite interogări SQL. Majoritatea bazelor de date SQL vor beneficia, prin urmare, de a avea cel puțin un index cluster și indecși non-cluster pentru coloanele care sunt actualizate în mod regulat.

Importanța indexurilor în SQL Server

Indecșii grupați și negrupați conduc la o performanță mai mare a interogărilor. Când executați o interogare, optimizatorul de interogări scanează indexul pentru locația de stocare a unui rând și apoi preia informații din acea locație. Acest lucru este mult mai rapid decât scanarea tuturor rândurilor din tabel.

De asemenea, puteți utiliza indecși non-cluster pentru a rezolva blocajele de căutare a marcajelor prin crearea unui index non-cluster pentru coloanele la care interogările implicate le accesează.