Без кластеризованного индекса ваш стол организован как куча. Это означает, что каждая строка, которая является вставкой, добавляется на странице данных в конце таблицы. Также, когда строки обновляются, они перемещаются на страницу данных в конце таблицы, если обновленные данные больше, чем раньше.
Когда это хорошо, чтобы не иметь кластерный индекс
Если у вас есть таблица, которая нуждается в быстрых возможных вставок, но может принести в жертву обновления и скорость чтения, то не имея кластерный индекс может работать вы. Например, если бы у вас была таблица, которая использовалась в качестве очереди, например, множество вставок, которые позже просто считываются и перемещаются в другую таблицу.
Кластеризованные индексы
Кластерные индексы организовать данные в таблице на основе столбцов в кластерном индексе. Если вы скопируете неправильную вещь, например, uniqueidentifier, это может замедлить работу (см. Ниже).
Пока ваш кластеризованный индекс находится на значении, которое наиболее часто используется для поиска, и оно уникально и увеличивает их, вы получаете некоторые потрясающие преимущества производительности из кластерного индекса.Например, если у вас есть таблица под названием USERS, в которой вы обычно просматриваете пользовательские данные на основе USER_ID, тогда кластеризация на USER_ID ускорит работу всех этих поисков. Это просто уменьшает количество страниц данных, которые необходимо прочитать, чтобы получить данные.
Если у вас слишком много ключей в вашем кластерном индексе, это также может замедлить работу.
Общие правила для кластерных индексов:
Не группировать по любым VARCHAR столбцов.
Кластеризация на колонках INT IDENTITY обычно лучше всего.
Кластер на то, что вы обычно ищете.
кластеризация на UniqueIdentifiers
С uniqueidentifiers в индексе, они крайне неэффективны, поскольку не существует естественный порядок сортировки. Основываясь на b-древовидной структуре индекса, вы получаете крайне фрагментированные индексы при использовании уникальных идентификаторов. После восстановления или реорганизации они все еще чрезвычайно фрагментированы. Таким образом, вы получаете более медленный индекс, который в конечном итоге становится действительно огромным в памяти и на диске из-за фрагментации. Также при вставках уникального идентификатора вы, скорее всего, получите разбивку страницы на индекс, что замедлит вашу вставку. Как правило, уникальные идентификаторы являются плохими новостями для индексов.
Резюме
Моя рекомендация состоит в том, что каждая таблица должна иметь кластерный индекс на нем, если нет действительно хорошая причина, чтобы не (т.е. таблица функционирует в качестве очереди).
Вот связанный с этим вопрос на [DBA-SE] (http://dba.stackexchange.com/) с некоторой информацией и несколькими ссылками, где вы можете читать. [Производительность некластеризованных индексов на кучи и кластерные индексы] (http://dba.stackexchange.com/questions/9829/performance-of-non-clustered-indexes-on-heaps-vs-clustered-indexes) –
Вероятно, вопрос, на который лучше всего отвечает кто-то, знакомый как с Oracle, так и с SQL Server. [dba.se] может быть лучшим местом для этого. –
Также предлагаю вам переместить этот вопрос на dba.se. У него было два комментария и (чисто случайный) ответ от постоянных пользователей DBA.SE без каких-либо других плакатов, фактически собирающих эти кластерные индексы, а IOTs действительно имеют существенные отличия. – ConcernedOfTunbridgeWells