Tento příspěvek je jen převyprávěním toho, co se můžete dočíst např. v MS SQL Books Online.
Přesto si myslím, že upozornění na zmiňovanou novou vlastnost MS SQL Serveru 2005 mnozí ocení.
Když definujete sloupce pro nový index, můžete si (nově v MS SQL Serveru 2005) vybrat, jestli je zahrnete do indexu plně (jako postaru) a nebo je tam jen připojíte (tzv. non-key columns).
Příkaz CREATE INDEX vypadá zhruba takhle:
CREATE INDEX index_name
ON object (keyColumn1, keyColumn2...)
INCLUDE (nonKeyColumn1, nonKeyColumn2...)
Non-key columns nebudou (narozdíl od key-columns) zahrnuty do vyhledávacího stromu indexu, ale budou připojeny jen k listům tohoto stromu. SQL server je tedy nemůže použít k urychlení vyhledávání ani urychlení řazení.
K čemu jsou ale potom ty non-key columns dobré?
Odpověď zní: full coverage.
Pokud víte, co tento termín znamená, asi vám už svitlo a nemusíte číst dál.
Pro ty ostatní:
Když SQL Server sestavuje složitější dotaz, ve kterém k vyhledávání používá index, musí nejprve projít index a pak obvykle z tohoto indexu získat odkazovaný záznam z tabulky a z něj reálná data. Jakmile však použitý index obsahuje všechny sloupce, které ve svém dotazu z dané tabulky požadujete, považuje se dotaz za fully covered, hodnoty se vezmou rovnou z indexového souboru a do tabulky se vůbec nepřistupuje.
Z toho plynoucí ušetření výkonu je asi každému jasné (i když jeho přesnou míru vám sdělit nemohu, z vlastní zkušennosti však vím, že je znatelná).
Technologie non-key columns vám umožní (s cílem dosáhnou častěji full coverage) definovat daleko rozsáhlejší indexy, jejich rozsah však nebude tolik zpomalovat modifikační operace (kdy se index musí přestavovat - tzv. index rebalancing) a navíc vám to umožní zahrnout do full covered množiny sloupce, jejichž součet velikosti je větší, než 900 bajtů (což je limit pro celkovou velikost key-columns). Navíc můžete v non-key columns použít i další datové typy, které v běžných key-columns použít nelze.
Pro jednoduchost jsem tu nezmiňoval další detaily k použití non-key columns, vše najdete ve zmiňovaném článku v MS SQL Books Online.