Úložiště haldy nemá nic společného s těmito haldami .
Halda znamená, že samotné záznamy nejsou seřazeny (tj. nejsou vzájemně propojeny).
Když vložíte záznam, vloží se pouze do volného místa, které databáze najde.
Aktualizace řádku v tabulce založené na hromadě neovlivní ostatní záznamy (ačkoli ovlivní sekundární indexy)
Pokud vytvoříte sekundární index na HEAP
tabulka RID
(druh fyzického ukazatele na úložný prostor) se používá jako ukazatel řádku.
Seskupený index znamená, že záznamy jsou součástí B-Tree
. Když vložíte záznam, B-Tree
je třeba znovu propojit.
Aktualizace řádku v seskupené tabulce způsobí opětovné propojení B-stromu, tj. E. aktualizace interních ukazatelů v jiných záznamech.
Pokud vytvoříte sekundární index na seskupené tabulce, použije se hodnota klíče seskupeného indexu jako ukazatel řádku.
To znamená, že seskupený index by měl být jedinečný. Pokud seskupený index není jedinečný, speciální skrytý sloupec nazvaný uniquifier
je připojen k indexovému klíči, díky kterému je if jedinečný (a větší co do velikosti).
Za zmínku také stojí, že vytvořením sekundárního indexu na sloupci se hodnoty nebo klíč seskupeného indexu stanou součástí klíče sekundárního indexu.
Vytvořením indexu na seskupené tabulce ve skutečnosti vždy získáte složený index
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
Index IX_mytable_5678
je ve skutečnosti index v následujících sloupcích:
col5
col6
col7
col8
col1
col2
col3
col4
Má to ještě jeden vedlejší účinek:
A DESC
podmínka v jednosloupcovém indexu v klastrované tabulce dává smysl v SQL Server
Tento index:
CREATE INDEX IX_mytable ON mytable (col1)
lze použít v dotazu, jako je tento:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, zatímco tento:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
lze použít v dotazu, jako je tento:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC