Вы почти наверняка захотите установить кластерный индекс для каждой таблицы в своей базе данных. Если таблица не имеет кластеризованного индекса, это то, что называется «кучей», и производительность большинства типов общих запросов составляет меньше для кучи, чем для таблицы кластеризованного индекса.
Для каких полей следует установить кластерный индекс, зависит от самой таблицы и ожидаемых шаблонов использования запросов к таблице. Почти в каждом случае вы, вероятно, хотите, чтобы кластеризованный индекс находился в столбце или комбинации столбцов, которые являются уникальными, то есть (альтернативным ключом), потому что в противном случае SQL добавит уникальное значение в конец любого поля, которые вы выбираете в любом случае. Если в вашей таблице есть столбец или столбцы, которые будут часто использоваться запросами для выбора или фильтрации нескольких записей (например, если ваша таблица содержит транзакции продаж, а ваше приложение часто запрашивает транзакции продаж по идентификатору продукта или даже лучше, таблица сведений о счете, где почти в каждом случае вы будете извлекать все подробные записи для конкретного счета, или таблицу счетов, где вы часто получаете все счета для конкретного клиента ... Это верно независимо от того, будете ли вы выбраны крупным количество записей по одному значению или по диапазону значений)
Эти столбцы являются кандидатами для кластерного индекса. Порядок столбцов в кластеризованном индексе имеет решающее значение. Первый столбец, определенный в индексе, должен быть столбцом, который будет выбран или отфильтрован первым в ожидаемых запросах.
Причина всего этого основана на понимании внутренней структуры индекса базы данных. Эти индексы называются индексами сбалансированного дерева (B-Tree). они похожи на двоичное дерево, за исключением того, что каждый узел в дереве может иметь произвольное количество записей (и дочерних узлов) вместо двух. Что отличает кластерный индекс, так это то, что конечные узлы в кластеризованном индексе являются фактическими страницами данных физического диска самой таблицы. тогда как конечные узлы некластеризованного индекса просто «указывают» на страницы данных таблиц.
Следовательно, когда таблица имеет кластеризованный индекс, страницы данных таблицы являются конечным уровнем этого индекса, и каждая из них имеет указатель на предыдущую страницу и следующую страницу в порядке индекса (они образуют двусвязный список) .
Итак, если ваш запрос запрашивает диапазон строк, который находится в том же порядке, что и кластеризованный индекс ... процессору нужно только пройти индекс один (или, возможно, дважды), чтобы найти начальную страницу данных, а затем следовать указатели связанного списка для перехода на следующую страницу и следующую страницу, пока не будут прочитаны все необходимые страницы данных.
Для некластеризованного индекса он должен проходить индекс один раз для каждой строки, которую он извлекает ...
ПРИМЕЧАНИЕ: РЕДАКТИРОВАТЬ
Чтобы решить проблему с последовательностью столбцов Guid Key, имейте в виду, что SQL2k5 имеет NEWSEQUENTIALID (), который фактически генерирует Guid "старым" последовательным способом.
или вы можете исследовать алгоритм руководства Jimmy Nielsens COMB, который реализован в коде на стороне клиента:
COMB Guids
person
Charles Bretana
schedule
10.11.2008