Съхранението на купчина няма нищо общо с тези купчини .
Купчина просто означава, че самите записи не са подредени (т.е. не са свързани един с друг).
Когато вмъкнете запис, той просто се вмъква в свободното пространство, което базата данни намира.
Актуализиране на ред в таблица, базирана на купчина, не засяга други записи (въпреки че засяга вторичните индекси)
Ако създадете вторичен индекс на HEAP
таблица, RID
(вид физически указател към пространството за съхранение) се използва като указател на ред.
Клъстърният индекс означава, че записите са част от B-Tree
. Когато вмъкнете запис, B-Tree
трябва да се свърже отново.
Актуализиране на ред в клъстерна таблица причинява повторно свързване на B-дървото, т.е. д. актуализиране на вътрешни указатели в други записи.
Ако създадете вторичен индекс на клъстерирана таблица, стойността на ключа на клъстерен индекс се използва като указател на ред.
Това означава, че клъстерният индекс трябва да бъде уникален. Ако групираният индекс не е уникален, специална скрита колона, наречена uniquifier
се добавя към индексния ключ, който го прави уникален (и по-голям по размер).
Също така си струва да се отбележи, че създаването на вторичен индекс на колона прави стойностите или ключа на клъстерирания индекс част от ключа на вторичния индекс.
Чрез създаване на индекс на клъстерна таблица, вие всъщност винаги получавате съставен индекс
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
Индекс IX_mytable_5678
е всъщност индекс на следните колони:
col5
col6
col7
col8
col1
col2
col3
col4
Това има още един страничен ефект:
A DESC
условие в индекс с една колона на клъстерирана таблица има смисъл в SQL Server
Този индекс:
CREATE INDEX IX_mytable ON mytable (col1)
може да се използва в заявка като тази:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, докато този:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
може да се използва в заявка като тази:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC