Index pomáha serveru SQL Server rýchlo získavať údaje z riadkov. Indexy fungujú ako obsah na začiatku kníh, čo vám umožňuje rýchlo vyhľadať stránku, na ktorej sa téma nachádza. Bez indexov musí SQL Server skenovať všetky riadky v tabuľke, aby našiel záznam.
V SQL Serveri existujú dva typy indexov: klastrované a neklastrované. Zistite rozdiel medzi klastrovanými a nezhlukovanými indexmi a prečo sú dôležité.
Klastrovaný index na serveri SQL Server
V klastrovanom indexe sú riadky údajov fyzicky uložené usporiadaným spôsobom na základe hodnoty kľúča. Keďže index obsahuje tabuľku a môže usporiadať riadky iba v jednom poradí, môžete vytvoriť iba jeden klastrovaný index na tabuľku.
Zatiaľ čo indexy zrýchľujú získavanie riadkov v rozsahu, príkazy INSERT a UPDATE môže byť pomalé, pretože optimalizátor dotazov prehľadáva index v poradí, kým nenájde cieľový index.
Neklastrovaný index na serveri SQL Server
Neklastrovaný index obsahuje hodnoty kľúča, ktorých vstupom je ukazovateľ nazývaný lokátor riadkov. Pre klastrované tabuľky (tabuľky s klastrovaným indexom) ukazovateľ ukazuje na kľúč v klastrovanom indexe, ktorý zase ukazuje na riadok v tabuľke. Pre riadky bez klastrovaného indexu ukazovateľ ukazuje priamo na riadok tabuľky.
Ako vytvoriť klastrovaný index na serveri SQL Server
Keď vytvoríte tabuľku s primárnym kľúčom, SQL Server automaticky vytvorí klastrovaný indexový kľúč založený na tomto primárnom kľúči. Ak nemáte primárny kľúč, môžete vykonať nasledujúci príkaz a vytvoriť klastrovaný indexový kľúč.
VYTVORIŤ KLUSTROVANÝ INDEX <indexnázov>
NA STOLE <názov_tabuľky>(názov_stĺpca)
V tomto príkaze zadávate názov indexu, názov tabuľky, v ktorej sa má vytvoriť, a názov stĺpca, ktorý sa má použiť v indexe.
Ak pridáte primárny kľúč do tabuľky, ktorá už má klastrovaný index, SQL Server s ním vytvorí neklastrovaný index.
Ak chcete vytvoriť klastrovaný index, ktorý nezahŕňa stĺpec primárneho kľúča, musíte najskôr zrušiť obmedzenie primárneho kľúča.
POUŽÍVAŤnázov_databázy
ALTERTABLE názov_tabuľky
POKLESOBMEDZENIE pk_name
Ísť
Odstránením obmedzení primárneho kľúča sa odstráni aj klastrovaný index, ktorý vám umožní vytvoriť vlastný.
Ako vytvoriť index bez klastrov na serveri SQL Server
Ak chcete vytvoriť index bez klastrov, použite nasledujúci príkaz.
VYTVORIŤINDEX <indexnázov>
NA STOLE <názov_tabuľky>(názov_stĺpca)
Kľúčové slovo NONCLUSTERED môžete použiť aj takto:
VYTVORIŤ [NEZAHRNUTÉ] INDEX <indexnázov>
NA STOLE <názov_tabuľky>(názov_stĺpca)
Tento príkaz vytvorí index bez klastrov v tabuľke, ktorú určíte, a zahŕňa stĺpec, ktorý uvediete.
Ak chcete, môžete stĺpce zoradiť vo vzostupnom (ASC) alebo zostupnom (DESC) poradí.
VYTVORIŤ [NEZAHRNUTÉ] INDEX <indexnázov>
NA STOLE <názov_tabuľky>(názov_stĺpca ASC/DESC)
Ktorý index by ste si mali vybrať?
Klastrované aj neklastrované indexy zlepšujú čas dotazovania. Ak väčšinu vašich dotazov tvoria operácie SELECT na niekoľkých stĺpcoch tabuľky, klastrované indexy sú rýchlejšie. V prípade operácií INSERT alebo UPDATE sú však indexy bez klastrov rýchlejšie, pretože optimalizátor dotazov dokáže nájsť stĺpec priamo z indexu.
Ako vidíte, tieto indexy fungujú najlepšie rôzne SQL dotazy. Väčšina databáz SQL bude preto ťažiť z toho, že bude mať aspoň jeden klastrovaný index a neklastrované indexy pre stĺpce, ktoré sa pravidelne aktualizujú.
Význam indexov v SQL Server
Klastrované a neklastrované indexy vedú k vyššiemu výkonu dotazov. Keď spustíte dotaz, optimalizátor dotazov prehľadá index pre umiestnenie úložného priestoru riadka a potom získa informácie z tohto umiestnenia. Je to oveľa rýchlejšie ako skenovanie všetkých riadkov v tabuľke.
Neklastrované indexy môžete použiť aj na vyriešenie uviaznutia pri vyhľadávaní záložiek vytvorením neklastrovaného indexu pre stĺpce, ku ktorým majú dotazy prístup.