Weblog @ rebex.cz

Weblogy na webu Rebexu
Welcome to Weblog @ rebex.cz Sign in | Help
in Search

Weblog @ Rebex.cz :: Honza Šotola

nepravidelné poznámky .NET vývojáře

Nonkey index columns in MS SQL Server 2005

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.

Published 10. ledna 2007 11:06 by honzas
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(optional)
(required) 
Submit
Powered by Community Server (Personal Edition), by Telligent Systems