sql >> Databáze >  >> RDS >> Sqlserver

Index SQL Server Které by měly být clustery?

Frederik to hezky shrnuje a to je skutečně to, co Kimberly Tripp také káže:shlukovací klíč by měl být stabilní (nikdy se nemění), stále rostoucí (IDENTITY INT), malý a jedinečný.

Ve vašem scénáři bych mnohem raději umístil shlukovací klíč do sloupce BIGINT spíše než do sloupce VARCHAR(80).

Za prvé, se sloupcem BIGINT je přiměřeně snadné vynutit jedinečnost (pokud nevynucujete a nezaručujete jedinečnost sami, SQL Server přidá 4bajtový „unikátnější“ ke každému z vašich řádků) a je to MNOHEM v průměru menší než VARCHAR(80).

Proč je velikost tak důležitá? Clusterovací klíč bude také přidán do KAŽDÉHO a každého z vašich neklastrovaných indexů – takže pokud máte mnoho řádků a mnoho neklastrovaných indexů, můžete mít 40–80 bajtů oproti 8 bajtům rychle OBROVSKÉ rozdíl.

Také další tip na zlepšení výkonu:Abychom se vyhnuli takzvanému vyhledávání záložek (z hodnoty ve vašem neklastrovaném indexu přes klastrovací klíč do skutečných listových stránek dat), zavedl SQL Server 2005 pojem „zahrnuté sloupce“ ve vašich neklastrovaných indexech. Ty jsou velmi užitečné a často přehlížené. Pokud vaše dotazy často vyžadují pole indexu a pouze jedno nebo dvě další pole z databáze, zvažte jejich zahrnutí, abyste dosáhli toho, co se nazývá „krycí indexy“. Opět – viz vynikající článek Kimberly Tripp – je to bohyně indexování SQL Serveru! :-) a ona to dokáže vysvětlit mnohem lépe než já...

Abych to shrnul:umístěte svůj shlukovací klíč na malý, stabilní, jedinečný sloupec – a bude to v pohodě!

Marc



  1. Nástroj pro ladění MySQL pomalé dotazy?

  2. Primární musí obsahovat všechny sloupce v chybě umístění rozdělení tabulky?

  3. Vzdálené připojení k serveru Postgresql

  4. Převeďte Unixové časové razítko na hodnotu data v Oracle