Klastrované a neclusterované indexy popsané

  • 02/11/2019
  • 4 minuty na čtení
    • M
    • M
    • C
    • M
    • r
    • +9

Platí pro: SQL Server (všechny podporované verze) Azure SQL Database

Index je struktura na disku spojená s tabulkou nebo pohledem, která zrychluje načítání řádků z tabulky nebo pohledu. Rejstřík obsahuje klíče sestavené z jednoho nebo více sloupců v tabulce nebo zobrazení. Tyto klíče jsou uloženy ve struktuře (B-strom), která umožňuje serveru SQL Server rychle a efektivně najít řádek nebo řádky spojené s hodnotami klíčů.

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

  • Klastrované

    • Klastrované indexy třídí a ukládají datové řádky v tabulce nebo zobrazení na základě jejich klíčových hodnot. Toto jsou sloupce obsažené v definici indexu. V jedné tabulce může být pouze jeden seskupený index, protože samotné datové řádky lze uložit pouze v jednom pořadí.
    • Datové řádky v tabulce jsou uloženy v seřazeném pořadí pouze tehdy, když tabulka obsahuje seskupený index. Pokud má tabulka seskupený index, tato tabulka se nazývá seskupená tabulka. Pokud tabulka nemá klastrovaný index, jsou její datové řádky uloženy v neuspořádané struktuře zvané halda.
  • Nonclustered

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

    • Ukazatel z řádku indexu v nekupovaném index do datového řádku se nazývá vyhledávač řádků. Struktura lokátoru řádků závisí na tom, zda jsou datové stránky uloženy v haldě nebo v seskupené tabulce. Pro haldu je vyhledávač řádků ukazatelem na řádek. U seskupené tabulky je vyhledávač řádků seskupený indexový klíč.

    • Na úroveň listu nekupovaného indexu můžete přidat sloupce, které nejsou klíčem, a obejít tak existující omezení klíče indexu, a provádět plně pokryté, indexované dotazy. Další informace najdete v tématu vytváření indexů se zahrnutými sloupci. Podrobnosti o omezeních indexových klíčů najdete v části Specifikace maximální kapacity pro SQL Server.

Klastrované i neclusterované indexy mohou být jedinečné. To znamená, že žádné dva řádky nemohou mít pro indexový klíč stejnou hodnotu. 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ých indexů.

Indexy se automaticky udržují pro tabulku nebo zobrazení, kdykoli se upraví data tabulky.

Další typy indexů pro speciální účely najdete v části Indexy.

Rejstříky a omezení

Rejstříky se vytvářejí automaticky, když jsou ve sloupcích tabulky definována omezení PRIMARY KEY a UNIQUE. Například když vytvoříte tabulku s UNIQUE omezením, Database Engine automaticky vytvoří nekupovaný index. Pokud nakonfigurujete PRIMÁRNÍ KLÍČ, Database Engine automaticky vytvoří seskupený index, pokud již seskupený index neexistuje. Když se pokusíte vynutit omezení PRIMARY KEY na existující tabulce a v této tabulce již existuje seskupený index, vynucuje SQL Server primární klíč pomocí indexu bez seskupení.

Další informace najdete v části Vytvoření primárních klíčů a Vytvářejte jedinečná omezení.

Jak jsou indexy používány Optimalizátorem dotazů

Dobře navržené indexy mohou snížit operace I / O disku a spotřebovat méně systémových prostředků, a tím zlepšit výkon dotazů. Rejstříky mohou být užitečné pro různé dotazy, které obsahují příkazy SELECT, UPDATE, DELETE nebo MERGE. Zvažte dotaz SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250 v databázi AdventureWorks2012. Když je tento dotaz spuštěn, optimalizátor dotazů vyhodnotí každou dostupnou metodu pro načtení dat a vybere nejúčinnější metodu. Metoda může být skenování tabulky, nebo skenování jednoho nebo více indexů, pokud existují.

Při skenování tabulky optimalizátor dotazů přečte všechny řádky v tabulce a extrahuje řádky, které splňují kritéria dotazu. Skenování tabulky generuje mnoho operací I / O disku a může být náročné na zdroje. Prohledávání tabulky by však mohlo být nejúčinnější metodou, pokud je například výsledná sada dotazu vysoké procento řádků z tabulky.

Když optimalizátor dotazů používá index, prohledá indexovat klíčové sloupce, vyhledá umístění úložiště řádků potřebných pro dotaz a extrahuje odpovídající řádky z tohoto umístění. Prohledávání indexu je obecně mnohem rychlejší než prohledávání tabulky, protože na rozdíl od tabulky index často obsahuje velmi málo sloupců na řádek a řádky jsou seřazeny v seřazeném pořadí.

Optimalizátor dotazů obvykle vybírá nejúčinnější metodu při provádění dotazů. Pokud však nejsou k dispozici žádné indexy, musí optimalizátor dotazů použít skenování tabulky. Vaším úkolem je navrhnout a vytvořit indexy, které jsou nejvhodnější pro vaše prostředí, aby měl optimalizátor dotazů výběr efektivních indexů, ze kterých je možné 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 s výběrem vhodných indexů.

Důležité

Další informace o pokynech pro návrh indexu a interní informace najdete v Průvodci designem indexu serveru SQL Server.

  • Průvodce designem indexu serveru SQL Server
  • Vytváření seskupených indexů
  • Vytváření bez clusterů Rejstříky

Leave a Reply

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *