Лучший кандидат для индекса CLUSTERED
- это ключ, который вы используете для наиболее частого обращения к своим записям.
Обычно это PRIMARY KEY
, поскольку оно используется в поисках и / или FOREIGN KEY
отношениях.
В вашем случае Orders.ID
, скорее всего, будет участвовать в поисках и ссылках, поэтому это лучший кандидат для выражения кластеризации.
Если вы создадите индекс CLUSTERED
для Orders.CustomerID
, произойдет следующее:
CustomerID
не уникален. Чтобы обеспечить уникальность, к каждой записи будет добавлен специальный скрытый столбец 32-bit
, известный как uniquifier
.
Записи в таблице будут сохраняться в соответствии с этой парой столбцов (CustomerID, uniquifier)
.
Будет создан вторичный индекс для Order.ID
, с (CustomerID, uniquifier)
в качестве указателей записи.
Запросы, подобные этому:
SELECT *
FROM Orders
WHERE ID = 1234567
потребуется выполнить внешнюю операцию, a Clustered Seek
, поскольку не все столбцы хранятся в индексе на ID
. Чтобы извлечь все столбцы, запись должна сначала находиться в кластеризованной таблице.
Для этой дополнительной операции требуется IndexDepth
столько же прочтенных страниц, сколько Clustered Seek
, IndexDepth
beign O(log(n))
от общего числа записей в вашей таблице.