Почему на корневой странице уникального некластеризованного индекса нет динамической памяти, а на корневой странице неуникального некластеризованного индекса нет?

Я делаю некоторый анализ и пытаюсь получить некоторое представление об уникальных и неуникальных некластерных индексах в 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 ответ

Пожалуйста, прочитайте эти статьи (обе написаны Клаусом Ашенбреннером):

Выдержка:

"Здесь делается вывод, что уникальный некластеризованный индекс для неуникального кластеризованного индекса создает только 4-байтовые издержки на уровне листьев кластерного индекса, потому что здесь SQL Server напрямую указывает на правильную запись. Никаких дополнительных издержек нет. участвует в неконечных уровнях уникального некластеризованного индекса ".

Поскольку он напрямую указывает на правильную запись, RID кучи отсутствует.

Поскольку уникальный ключ сам по себе является уникальным идентификатором строки, в уникальном CI или уникальном NCI отсутствует RID. RID происходит, когда в этой строке нет уникального ключа, поэтому SQL Server добавляет идентификатор строки (RID), чтобы найти строку и взобраться на B-дерево.

Таким образом, RID не имеет ничего общего с CI или NCI. МПОГ связан с уникальностью строки.

Другие вопросы по тегам