SQLShack (Română)
Indexurile sunt utilizate pentru a accelera procesul de interogare în SQL Server, rezultând performanţă. Sunt similare cu indexurile manualelor. În manuale, dacă trebuie să accesați un anumit capitol, accesați indexul, găsiți numărul paginii capitolului și accesați direct pagina respectivă. Fără indexuri, procesul de găsire a capitolului dorit ar fi fost foarte lent.
La fel se aplică și indexurilor din bazele de date. Fără indexuri, un SGBD trebuie să parcurgă toate înregistrările din tabel pentru a prelua rezultatele dorite. Acest proces se numește scanare în tabel și este extrem de lent. Pe de altă parte, dacă creați indexuri, baza de date merge mai întâi la acel index și apoi preia direct înregistrările de tabel corespunzătoare.
Există două tipuri de indexuri în SQL Server:
- Index clusterizat
- Index non-clusterizat
Index clusterizat
Un index clusterizat definește ordinea în care datele sunt stocate fizic într-un tabel. Datele din tabel pot fi sortate într-un singur mod, prin urmare, poate exista un singur index grupat pe tabel. În SQL Server, constrângerea cheii principale creează automat un index grupat pe acea coloană.
Să aruncăm o privire. Mai întâi, creați un tabel „student” în „schooldb” executând următorul script sau asigurați-vă că baza de date este complet copiată dacă utilizați datele dvs. live:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
CREATE DATABASE schooldb
CREATE TABLE student
(
id INT CHEIE PRIMARĂ,
nume VARCHAR (50) NOT NULL,
sex VARCHAR (50) NOT NULL,
DOB datetime NOT NULL,
total_score INT NOT NULL,
oraș VARCHAR (50) NOT NULL
)
|
Notificare aici, în tabelul „elev” am stabilit prima ry constrângere cheie pe coloana „id”. Acest lucru creează automat un index grupat pe coloana „id”. Pentru a vedea toate indexurile de pe un anumit tabel executați procedura stocată „sp_helpindex”. Această procedură stocată acceptă numele tabelului ca parametru și recuperează toți indexurile tabelului. Următoarea interogare preia indexurile create pe tabela studenților.
1
2
3
4
5
|
USE schooldb
EXECUTE student sp_helpindex
|
Interogarea de mai sus va returna acest rezultat:
index_name | index_description | index_keys |
PK__student__3213E83F7F60ED59 | cheie principală, unică, grupată, situată în ID-ul PRIMARY |
În ieșire puteți vedea singurul index. Acesta este indexul care a fost creat automat din cauza constrângerii cheii primare din coloana „id”.
Acest index grupat stochează înregistrarea în tabelul studenților în ordinea crescătoare a „id-ului”. Prin urmare, dacă înregistrarea inserată are id-ul 5, înregistrarea va fi inserată în al 5-lea rând al tabelului în loc de primul rând. În mod similar, dacă a patra înregistrare are un id de 3, va fi inserată în al treilea rând în loc de al patrulea rând. Acest lucru se datorează faptului că indexul grupat trebuie să mențină ordinea fizică a înregistrărilor stocate în conformitate cu coloana indexată, adică id. Pentru a vedea această comandă în acțiune, executați următorul script:
Scriptul de mai sus introduce zece înregistrări în tabelul studentului. Observați aici că înregistrările sunt inserate în ordine aleatorie a valorilor din coloana „id”. Dar, din cauza indexului grupat implicit din coloana id, înregistrările sunt stocate fizic în ordinea crescătoare a valorilor din coloana „id”. Executați următoarea instrucțiune SELECT pentru a extrage înregistrările din tabelul studentului.
1
2
3
4
5
|
USE schooldb
SELECT * FROM student
|
Înregistrările vor fi recuperate în următoarea ordine:
Crearea indexului clusterizat personalizat
Puteți crea propriul dvs. index personalizat, precum și indexul cluster implicit. Pentru a crea un nou index grupat pe un tabel, trebuie mai întâi să ștergeți indexul anterior.
Pentru a șterge un index accesați „Object Explorer- > Baze de date- > Database_Name- > Tables- > Table_Name – > Indexuri”. Faceți clic dreapta pe indexul pe care doriți să îl ștergeți și selectați ȘTERGERE . Consultați captura de ecran de mai jos.
Acum, pentru a crea un nou index cluster, executați următorul script:
1
2
3
4
5
6
|
folosiți schooldb
CREAȚI INDICE CLUSTER IX_tblStudent_Gender_Score
ON student (sex ASC, total_score DESC)
|
Procesul cre atingerea unui index grupat este similar cu un index normal, cu o singură excepție. Cu indexul grupat, trebuie să utilizați cuvântul cheie „CLUSTERED” înainte de „INDEX”.
Scriptul de mai sus creează un index grupat numit „IX_tblStudent_Gender_Score” pe tabela studentului. Acest index este creat pe coloanele „gender” și „total_score”. Un index creat pe mai multe coloane este numit „index compozit”.
Indexul de mai sus sortează mai întâi toate înregistrările în ordinea crescătoare a sexului. Dacă sexul este același pentru două sau mai multe înregistrări, înregistrările sunt sortate în ordinea descrescătoare a valorilor din coloana lor „total_score”. Puteți crea și un index grupat pe o singură coloană. Acum, dacă selectați toate înregistrările din tabelul studențesc, vor fi recuperate în următoarea ordine:
Indici non-grupați
Un index non-grupat nu sortează datele fizice din tabel. De fapt, un indexul non-grupat este stocat într-un loc, iar datele din tabel sunt stocate într-un alt loc. Acest lucru este similar cu un manual în care conținutul cărții este situat într-un singur loc și indexul este situat într-un alt loc. Acest lucru permite mai mult de un non-cluster index pe tabel.
Este important să menționăm aici că în interiorul tabelului datele vor fi sortate după un index grupat. Cu toate acestea, în interiorul indexului non-grupat datele sunt stocate în ordinea specificată. Indexul conține valorile coloanei pe care este creat indexul și adresa înregistrării căreia îi aparține valoarea coloanei.
Când este emisă o interogare împotriva unei coloane pe care este creat indexul, baza de date va merge mai întâi la index și va căuta adresa rândului corespunzător din tabel. Apoi va merge la acea adresă de rând și va prelua alte valori ale coloanei. Datorită acestui pas suplimentar, indicii non-clusterizați sunt mai încet decât indicii clusterizați.
Crearea unui index non-cluster
Sintaxa pentru crearea unui index non-cluster este similară cu cea a indexului grupat. Cu toate acestea, în cazul indexului non-grupat, este utilizat cuvântul cheie „NONCLUSTERED” în loc de „CLUSTERED”. Aruncați o privire la următorul script.
1
2
3
4
5
6
|
use schooldb
CREAȚI INDICE NECLUSTER IX_tblStudent_Name
ON student (nume ASC)
|
Scriptul de mai sus creează un index non-grupat pe coloana „nume” a tabelului student. Indexul sortează după nume după cum am spus mai devreme, datele și indexul tabelului vor fi stocate în diferite locuri. Înregistrările tabelelor vor fi sortate după un index grupat, dacă există unul. Indexul va fi sortat conform definiției sale și va fi stocat separat de la masă.
Date tabel student:
IX_tblStudent_Name Index Data
nume | Adresă rând |
Alan | Adresă rând |
Elis | Adresă de rând |
Jolly | Adresă de rând |
Jon | Adresă la rând |
Joseph | Adresă la rând |
Kate | Adresă rând |
Laura | Adresă rând |
Șoareci | Adresă rând |
Sara | Adresă rând |
Înțelept | Adresă rând |
Notificare , aici în index fiecare rând are o coloană care stochează adresa rândului căruia îi aparține numele. Deci, dacă este emisă o interogare pentru a extrage genul și DOB-ul studentului numit „Jon”, baza de date va căuta mai întâi numele „Jon” în index. Apoi va citi adresa rândului „Jon” și va merge direct la acel rând din tabelul „student” pentru a prelua sexul și DOB-ul lui Jon.
Concluzie
Din discuție găsim următoarele diferențe între indicii grupați și non-grupați.
- Nu poate exista decât un singur index grupat pe tabel. Cu toate acestea, puteți crea mai mulți indici non-grupați pe un singur tabel.
- Indicii clusterizați doar sortează tabelele. Prin urmare, nu consumă spațiu de stocare suplimentar. Indecșii non-grupați sunt stocați într-un loc separat față de tabelul propriu-zis, care solicită mai mult spațiu de stocare.
- Indicii clusterizați sunt mai rapizi decât indicii ne-grupați, deoarece nu implică nicio etapă suplimentară de căutare.
Alte articole grozave de la Ben
Diferența dintre identitate & Secvență în SQL Server
Care este diferența dintre indexurile clusterizate și non-clusterizate din SQL Server?
- Autor
- Postări recente
Vezi toate mesajele lui Ben Richardson
- Power BI: diagrame cascadă și imagini combinate – 19 ianuarie 2021
- Power BI : Formatare condițională și culori de date în acțiune – 14 ianuarie 2021
- Power BI: Importarea datelor din SQL Server și MySQL – 12 ianuarie 2021
573.279 Vizualizări
© 2021 Quest Software Inc. TOATE DREPTURILE REZERVATE. | GDPR | Condiții de utilizare | Confidențialitate