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

Jak může index bez klastrů vygenerovat sloupec, který není zahrnut v indexu

Pokud je samotná tabulka shlukována , pak všechny sekundární indexy obsahují kopii klastrovacího klíče (klíč, který určuje fyzické pořadí řádků v klastrované tabulce).

Důvod:řádky v seskupené tabulce jsou fyzicky uloženy v B-stromu (nikoli v hromadě tabulky), a proto se mohou přesouvat když se uzly B-stromu rozdělí nebo sloučí, tak sekundární index nemůže obsahovat pouze řádek "ukazatel" (protože by hrozilo, že se po pohybu řádku "zasekne").

To má často škodlivý vliv na výkon – dotazování prostřednictvím sekundárního indexu může vyžadovat dvojité vyhledávání :

  • Nejprve prohledejte sekundární index a získejte klastrovací klíč.
  • Za druhé, na základě výše načteného klastrovacího klíče prohledejte samotnou klastrovanou tabulku (což je B-strom).

Pokud však chcete pouze pole klastrovacího klíče, je potřeba pouze první vyhledávání.

Známý jako "shlukovaný index" pod MS SQL Server.

Obvykle, ale ne nutně PRIMÁRNÍ KLÍČ pod MS SQL Server.

Je nešťastné, že clustering je pod MS SQL Serverem standardně zapnutý - lidé často nechávají výchozí nastavení, aniž by plně zvážili jeho účinky. Pokud není shlukování vhodné, měli byste explicitně zadat klíčové slovo NONCLUSTERED, abyste jej vypnuli.



  1. Nesprávná syntaxe poblíž 'OFFSET'. Neplatné použití volby NEXT v příkazu FETCH v jádře Entity Framework

  2. Příkaz INSERT v Oracle

  3. mysql Vyberte jeden sloupec dvakrát ze stejné tabulky s různými daty v klauzuli where

  4. Ukládání IPv6 adres v MySQL