Creative Saplings

SQLShack (Română)

februarie 22, 2021
No Comments

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:

  1. Index clusterizat
  2. 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.

  1. 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.
  2. 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.
  3. 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
Ben Richardson conduce Acuity Training, un furnizor important de instruire SQL în Marea Britanie. Oferă o gamă completă de instruire SQL, de la cursuri introductive până la instruire avansată în administrare și depozitare de date – consultați aici pentru mai multe detalii. Acuity are birouri în Londra și Guildford, Surrey. De asemenea, face bloguri ocazionale pe blogul Acuity
Vezi toate mesajele lui Ben Richardson

Ultimele mesaje ale lui Ben Richardson (vezi toate)
  • 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

Articles
Previous Post

Universități de top unde puteți studia contabilitate și finanțe

Next Post

9 câini cu ochi albaștri care vă vor hipnotiza

Lasă un răspuns Anulează răspunsul

Articole recente

  • Cele mai bune școli de fotografie din lume, 2020
  • Cetățenii suverani își duc filosofia anti-guvernamentală la drumuri
  • Ghid de costuri de reparații stuc
  • Muckrakers (Română)
  • Oncologie de precizie

Arhive

  • februarie 2021
  • ianuarie 2021
  • decembrie 2020
  • noiembrie 2020
  • octombrie 2020
  • septembrie 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.