Heap-opslag heeft niets te maken met deze hopen .
Heap betekent alleen dat records zelf niet geordend zijn (d.w.z. niet aan elkaar gekoppeld).
Wanneer u een record invoegt, wordt het gewoon ingevoegd in de vrije ruimte die de database vindt.
Het bijwerken van een rij in een op heap gebaseerde tabel heeft geen invloed op andere records (hoewel het wel van invloed is op secundaire indexen)
Als u een secundaire index maakt op een HEAP
tabel, de RID
(een soort fysieke aanwijzer naar de opslagruimte) wordt gebruikt als rijaanwijzer.
Geclusterde index betekent dat de records onderdeel zijn van een B-Tree
. Wanneer u een record invoegt, wordt de B-Tree
moet opnieuw worden gekoppeld.
Het bijwerken van een rij in een geclusterde tabel veroorzaakt het opnieuw koppelen van de B-Tree, i. e. interne verwijzingen in andere records bijwerken.
Als u een secundaire index maakt op een geclusterde tabel, wordt de waarde van de geclusterde indexsleutel gebruikt als rijaanwijzer.
Dit betekent dat een geclusterde index uniek moet zijn. Als een geclusterde index niet uniek is, een speciale verborgen kolom genaamd uniquifier
wordt toegevoegd aan de indexsleutel die maakt indien uniek (en groter in omvang).
Het is ook vermeldenswaard dat het maken van een secundaire index op een kolom ervoor zorgt dat de waarden of de sleutel van de geclusterde index deel uitmaken van de sleutel van de secundaire index.
Door een index op een geclusterde tabel te maken, krijg je in feite altijd een samengestelde 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
is in feite een index op de volgende kolommen:
col5
col6
col7
col8
col1
col2
col3
col4
Dit heeft nog een bijwerking:
Een DESC
voorwaarde in een index met één kolom op een geclusterde tabel is logisch in SQL Server
Deze index:
CREATE INDEX IX_mytable ON mytable (col1)
kan worden gebruikt in een zoekopdracht als deze:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, terwijl deze:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
kan worden gebruikt in een zoekopdracht als deze:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC