Sdílet prostřednictvím


Clusterované a neclusterované indexy

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLDatabáze SQL v Microsoft Fabric

Index je struktura na disku přidružená k tabulce nebo zobrazení, která urychluje načítání řádků z tabulky nebo zobrazení. Index obsahuje klíče vytvořené z jednoho nebo více sloupců v tabulce nebo zobrazení. Tyto klíče jsou uložené ve struktuře (B-tree), která sql Serveru umožňuje rychle a efektivně najít řádek nebo řádky přidružené k klíčovým hodnotám.

Note

Dokumentace používá termín B-tree obecně v odkazu na indexy. V indexech rowstore databázový stroj implementuje strom B+. To neplatí pro indexy columnstore ani indexy v tabulkách optimalizovaných pro paměť. Další informace najdete v SQL Serveru a architektuře indexu Azure SQL a průvodci návrhem.

Tabulka nebo zobrazení mohou obsahovat následující typy indexů:

  • Clustered

    • Clusterované indexy seřadí a uloží řádky dat v tabulce nebo zobrazení na základě jejich klíčových hodnot. Tyto klíčové hodnoty jsou sloupce zahrnuté v definici indexu. Pro každou tabulku může existovat pouze jeden clusterovaný index, protože řádky dat samotné mohou být uloženy pouze v jednom pořadí.
    • Jediný čas, kdy jsou řádky dat v tabulce uloženy v seřazených pořadí, je, když tabulka obsahuje clusterovaný index. Pokud má tabulka clusterovaný index, tabulka se nazývá clusterovaná tabulka. Pokud tabulka neobsahuje clusterovaný index, ukládají se jeho datové řádky v neuspořádané struktuře označované jako halda.
  • Nonclustered

    • Neclusterované indexy mají strukturu oddělenou od řádků dat. Neklastrovaný index obsahuje hodnoty klíče neklastrovaného indexu a každá položka hodnoty klíče má ukazatel na datový řádek, který obsahuje hodnotu klíče.

    • Ukazatel z řádku indexu v neclusterém indexu na řádek dat se nazývá lokátor řádku. Struktura lokátoru řádků závisí na tom, jestli jsou datové stránky uložené v haldě nebo v clusterované tabulce. Pro haldu je lokátor řádku ukazatelem na řádek. V případě clusterované tabulky je lokátorem řádku clusterovaný indexový klíč.

    • Sloupce bez klíče můžete přidat na úroveň listu neclusterovaného indexu a obejít stávající limity klíče indexu a provádět plně pokryté dotazy. Další informace najdete v tématu Vytváření indexů se zahrnutými sloupci. Podrobnosti o limitech klíče indexu najdete v tématu Maximální specifikace kapacity pro SQL Server.

Clusterované i neclusterované indexy můžou být jedinečné. U jedinečného indexu nemohou mít žádné dva řádky stejnou hodnotu pro klíč indexu. Jinak index není jedinečný a více řádků může sdílet stejnou hodnotu klíče. Další informace najdete v tématu Vytvoření jedinečného indexu.

Indexy jsou automaticky udržovány pro tabulku nebo zobrazení při jakékoliv změně dat tabulky.

Další typy indexů pro zvláštní účely najdete v tématu Indexy .

Indexy a omezení

SQL Server automaticky vytvoří indexy, když jsou na sloupcích tabulky definována omezení PRIMARY KEY a UNIQUE. Když například vytvoříte tabulku s UNIQUE omezením, databázový stroj automaticky vytvoří neclusterovaný index. Pokud nakonfigurujete clusterový PRIMARY KEYindex, databázový stroj automaticky vytvoří clusterovaný index, pokud clusterovaný index ještě neexistuje. Když se pokusíte vynutit PRIMARY KEY omezení existující tabulky a clusterovaný index již v této tabulce existuje, SQL Server vynucuje primární klíč pomocí neclusterovaného indexu.

Další informace najdete v tématu Vytvoření primárních klíčů a Vytvoření jedinečných omezení.

Jak se indexy používají optimalizátorem dotazů

Dobře navržené indexy můžou snížit vstupně-výstupní operace disku a využívat méně systémových prostředků. Proto tyto indexy zlepšují výkon dotazů. Indexy můžou být užitečné pro různé dotazy, které obsahují SELECTpříkazy , UPDATE, DELETEnebo MERGE příkazy. Zvažte dotaz SELECT JobTitle, HireDate FROM HumanResources.Employee WHERE BusinessEntityID = 250 v AdventureWorks2025 databázi. Když se tento dotaz spustí, optimalizátor dotazů vyhodnocuje každou dostupnou metodu pro načtení dat a vybere nejúčinnější metodu. Metoda může být prohledáváním tabulky nebo může prohledávat jeden nebo více indexů, pokud existují.

Během prohledávání tabulky načte optimalizátor dotazů všechny řádky v tabulce a extrahuje řádky, které splňují kritéria dotazu. Prohledávání tabulky generuje mnoho vstupně-výstupních operací disku a může být náročné na prostředky. Prohledávání tabulek ale může být nejúčinnější metodou, pokud například sada výsledků dotazu představuje vysoké procento řádků z tabulky.

Když optimalizátor dotazů používá index, prohledá sloupce s klíčem indexu, najde umístění úložiště řádků potřebných dotazem a extrahuje odpovídající řádky z tohoto umístění. Obecně platí, že prohledávání indexu je mnohem rychlejší než hledání v tabulce. Na rozdíl od tabulky index často obsahuje velmi málo sloupců na řádek a řádky jsou seřazené.

Optimalizátor dotazů obvykle vybere nejúčinnější metodu při provádění dotazů. Pokud ale nejsou k dispozici žádné indexy, musí optimalizátor dotazů použít prohledávání tabulky. Vaším úkolem je navrhnout a vytvořit indexy, které jsou pro vaše prostředí nejvhodnější, aby optimalizátor dotazů měl výběr efektivních indexů, ze kterých se má vybrat. SQL Server poskytuje poradce pro ladění databázového stroje , který vám pomůže s analýzou vašeho databázového prostředí a při výběru vhodných indexů.

Important

Další informace o pokynech k návrhu a interních principech indexů najdete v průvodci architekturou a návrhem indexů pro SQL Server a Azure SQL.