Почему на корневой странице уникального некластеризованного индекса нет динамической памяти, а на корневой странице неуникального некластеризованного индекса нет?
Я делаю некоторый анализ и пытаюсь получить некоторое представление об уникальных и неуникальных некластерных индексах в SQL Server 2008? После технического блога я сделал следующее.
USE TEST
CREATE TABLE "CustomersHeap" (
"CustomerId" INT NOT NULL,
"CustomerName" CHAR(100) NOT NULL,
"CustomerAddress" CHAR(100) NOT NULL,
"Comments" CHAR(189) NOT NULL
)
;
USE TEST
DECLARE @i INT = 1 WHILE (@i <= 80000) BEGIN
INSERT INTO dbo.CustomersHeap VALUES
(
@i,
'CustomerName' + CAST(@i AS CHAR),
'CustomerAddress' + CAST(@i AS CHAR),
'Comments' + CAST(@i AS CHAR)
) SET @i += 1
END
-- Create a unique non clustered index
CREATE UNIQUE NONCLUSTERED INDEX IDX_UniqueNCI_CustomerID
ON Test.dbo.CustomersHeap(CustomerId)
-- Create a non-unique non clustered index
CREATE NONCLUSTERED INDEX IDX_NonUniqueNCI_CustomerID
ON Test.dbo.CustomersHeap(CustomerId)
--Get indexes
select * from sys.indexes where object_id=OBJECT_ID('Test.dbo.CustomersHeap')
--After figuring out index and child pages using DBCC IND
DBCC TRACEON(3604)
--UniqueNonClusteredIndex root page
DBCC PAGE(Test, 1, 4160, 3)
--NonUniqueNonClusteredIndex root page
DBCC PAGE(Test, 1, 4416, 3)
Выходные данные оператора первой страницы не содержат столбца с именем "HEAP RID", где, как и выходные данные оператора второй страницы. Я не могу понять причину, почему? особенно когда все строки имеют информацию о ChildPageId и они должны содержать 'HEAP RID' по праву.
Эти дополнительные столбцы увеличивают размер корневой страницы неуникального некластерного индекса.
Выходные столбцы для оператора первой страницы FileId, PageId, Row, Level, ChildFileId, ChildPageId, CustomerId,KeyHashValue
Выходные столбцы для оператора второй страницы FileId, PageId, Row, Level, ChildFileId, ChildPageId, CustomerId,HEAP RID,KeyHashValue
1 ответ
Пожалуйста, прочитайте эти статьи (обе написаны Клаусом Ашенбреннером):
"Уникальные и неуникальные индексы SQL Server в таблице кучи"
"Уникальные и неуникальные некластеризованные индексы для неуникального кластеризованного индекса"
Выдержка:
"Здесь делается вывод, что уникальный некластеризованный индекс для неуникального кластеризованного индекса создает только 4-байтовые издержки на уровне листьев кластерного индекса, потому что здесь SQL Server напрямую указывает на правильную запись. Никаких дополнительных издержек нет. участвует в неконечных уровнях уникального некластеризованного индекса ".
Поскольку он напрямую указывает на правильную запись, RID кучи отсутствует.
Поскольку уникальный ключ сам по себе является уникальным идентификатором строки, в уникальном CI или уникальном NCI отсутствует RID. RID происходит, когда в этой строке нет уникального ключа, поэтому SQL Server добавляет идентификатор строки (RID), чтобы найти строку и взобраться на B-дерево.
Таким образом, RID не имеет ничего общего с CI или NCI. МПОГ связан с уникальностью строки.