Вы почти наверняка хотите создать кластерный индекс каждой таблицы в базе данных. Если таблица не имеет кластерного индекса, это то, что называется «кучей», а производительность большинства типов общих запросов - less for a heap than for a clustered index table.
В каких полях должен быть установлен кластерный индекс, зависит от самой таблицы и ожидаемых шаблонов использования запросов к таблице. Почти во всех случаях вы, вероятно, хотите, чтобы кластеризованный индекс находился в столбце или комбинации столбцов, которые являются уникальными, то есть (альтернативный ключ), потому что, если это не так, SQL добавит уникальное значение в конец любого поля, которые вы выбираете в любом случае. Если в вашей таблице есть столбец или столбцы, которые будут часто использоваться запросами для выбора или фильтрации нескольких записей (например, если ваша таблица содержит транзакции продаж, и ваше приложение будет часто запрашивать транзакции продаж по идентификатору продукта или даже лучше, таблицу подробных сведений о счетах, где почти в каждом случае вы будете извлекать все подробные записи для счета-фактуры или счета-фактуры, где вы часто извлекаете все счета-фактуры для конкретного клиента ... Это верно, будет ли вы выбраны большие номера записей по одному значению или по диапазону значений)
Эти столбцы являются кандидатами для кластеризованного индекса. Порядок столбцов в кластерном индексе имеет решающее значение. Первым столбцом, определенным в индексе, должен быть столбец, который будет сначала выбран или отфильтрован в ожидаемых запросах.
Причина всего этого заключается в понимании внутренней структуры индекса базы данных. Эти индексы называются индикаторами с балансированным деревом (B-Tree). они похожи на двоичное дерево, за исключением того, что каждый узел в дереве может иметь произвольное количество записей (и дочерних узлов) вместо двух. Что делает кластеризованный индекс другим, так это то, что листовые узлы в кластерном индексе являются фактическими страницами данных физического диска самой таблицы. тогда как листовые узлы некластеризованного индекса просто «указывают» на страницы данных таблиц.
Если таблица имеет индекс clsutered, поэтому страницы данных таблиц - это уровень листа этого индекса, и каждый из них имеет указатель на предыдущую страницу и следующую страницу в порядке индекса (они образуют двунаправленный код, связанный список).
Так что если ваш запрос запрашивает ряд строк, которые находятся в том же порядке, что и кластеризованный индекс ... процессор должен пройти один раз (или, возможно, дважды), чтобы найти стартовую страницу данных, а затем следуйте указателям связанных списков, чтобы перейти к следующей странице и следующей странице, пока она не прочитает все необходимые страницы данных.
Для некластеризованного индекса он должен пересекать индекс один раз для каждой строки, которую он извлекает ...
ПРИМЕЧАНИЕ: EDIT
Для решения последовательного вопроса для Guid ключевых столбцов, следует помнить, что SQL2k5 имеет NEWSEQUENTIALID(), что делает фактически генерировать Guids «старый» последовательный путь.
или вы можете исследовать Джимми Nielsens расческу Guid algotithm, который реализуется в стороне клиента код:
COMB Guids
Взгляните на следующее сообщение Пола Рэндала. [Кластеризованный или некластеризованный индекс по случайному GUID?] (Http://www.sqlskills.com/blogs/paul/clustered-or-nonclustered-index-on-a-random-guid/) – Lijo 2016-09-09 20:55:57