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