Indekss palīdz SQL Server ātri izgūt datus no rindām. Rādītāji darbojas kā satura rādītājs grāmatu sākumā, ļaujot ātri meklēt tēmas lapu. Bez indeksiem SQL Server ir jāskenē visas tabulas rindas, lai atrastu ierakstu.
SQL Server ir divu veidu indeksi: grupēti un negrupēti. Uzziniet, kāda ir atšķirība starp klasterizētiem un negrupētiem indeksiem un kāpēc tie ir svarīgi.
Klasterizēts indekss SQL serverī
Klasterizētā indeksā datu rindas tiek fiziski saglabātas sakārtotā veidā, pamatojoties uz atslēgas vērtību. Tā kā indeksā ir iekļauta tabula un tas var sakārtot rindas tikai vienā secībā, katrai tabulai varat izveidot tikai vienu grupētu indeksu.
Lai gan indeksi atvieglo rindu izgūšanu diapazonā, INSERT un UPDATE paziņojumi var būt lēns, jo vaicājumu optimizētājs skenē indeksu secībā, līdz atrod mērķa indeksu.
Negrupēts indekss SQL serverī
Negrupēts indekss satur galvenās vērtības, kuru ieraksts ir rādītājs, ko sauc par rindu lokatoru. Klasterizētām tabulām (tabulām ar grupētu indeksu) rādītājs norāda uz klasterētā indeksa atslēgu, kas savukārt norāda uz tabulas rindu. Rindām bez grupēta indeksa rādītājs norāda tieši uz tabulas rindu.
Kā izveidot klasterizētu indeksu SQL serverī
Kad veidojat tabulu ar primāro atslēgu, SQL Server automātiski izveido klasterizētu indeksa atslēgu, pamatojoties uz šo primāro atslēgu. Ja jums nav primārās atslēgas, varat izpildīt šādu priekšrakstu, lai izveidotu grupētu indeksa atslēgu.
IZVEIDOT KLASTERĒTI INDEKSS <rādītājsnosaukums>
UZ GALDA <tabulas_nosaukums>(kolonnas_nosaukums)
Šajā paziņojumā jūs norādāt indeksa nosaukumu, tabulas nosaukumu, kurā to izveidot, un kolonnas nosaukumu, kas jāizmanto rādītājā.
Ja pievienojat primāro atslēgu tabulai, kurā jau ir grupēts indekss, SQL Server ar to izveidos negrupētu indeksu.
Lai izveidotu grupētu indeksu, kurā nav ietverta primārās atslēgas kolonna, vispirms ir jāatmet primārās atslēgas ierobežojums.
IZMANTOTdatu bāzes_nosaukums
ALTERTABULA tabulas_nosaukums
NOLIETOTIEROBEŽOJUMS pk_nosaukums
AIZIET
Noņemot primārās atslēgas ierobežojumus, tiek noņemts arī klasterizētais indekss, kas ļauj izveidot pielāgotu indeksu.
Kā izveidot neklasterētu indeksu SQL serverī
Lai izveidotu negrupētu indeksu, izmantojiet šādu priekšrakstu.
IZVEIDOTINDEKSS <rādītājsnosaukums>
UZ GALDA <tabulas_nosaukums>(kolonnas_nosaukums)
Varat arī izmantot šādu atslēgvārdu NONCLUSTERED:
IZVEIDOT [NEKLUSTERĒTS] INDEKSS <rādītājsnosaukums>
UZ GALDA <tabulas_nosaukums>(kolonnas_nosaukums)
Šis paziņojums jūsu norādītajā tabulā izveido negrupētu indeksu un ietver jūsu norādīto kolonnu.
Ja vēlaties, varat kārtot kolonnas augošā (ASC) vai dilstošā (DESC) secībā.
IZVEIDOT [NEKLUSTERĒTS] INDEKSS <rādītājsnosaukums>
UZ GALDA <tabulas_nosaukums>(kolonnas_nosaukums ASC/DESC)
Kuru indeksu izvēlēties?
Gan kopotie, gan negrupētie indeksi uzlabo vaicājumu veikšanas laiku. Ja lielākā daļa jūsu vaicājumu ir SELECT darbības vairākās tabulas kolonnās, grupētie indeksi ir ātrāki. Tomēr INSERT vai UPDATE operācijām negrupētie indeksi ir ātrāki, jo vaicājumu optimizētājs var atrast kolonnu tieši no indeksa.
Kā redzat, šie indeksi vislabāk darbojas dažādi SQL vaicājumi. Tāpēc lielākā daļa SQL datu bāzu gūs labumu no vismaz viena klasterizēta indeksa un negrupētu indeksu kolonnām, kuras tiek regulāri atjauninātas.
Indeksu nozīme SQL serverī
Klasterizēti un negrupēti indeksi nodrošina augstāku vaicājumu veiktspēju. Palaižot vaicājumu, vaicājuma optimizētājs skenē indeksu, lai atrastu rindas krātuves vietu, un pēc tam izgūst informāciju no šīs vietas. Tas ir daudz ātrāk nekā visu tabulas rindu skenēšana.
Varat arī izmantot negrupētus indeksus, lai atrisinātu grāmatzīmju uzmeklēšanas strupceļus, izveidojot negrupētu indeksu kolonnām, kurām piekļūst vaicājumi.