Что такое кластерный индекс?

15

Мне нужно краткое объяснение кластерного индекса.

  • Что такое кластерный индекс?
  • Каковы оптимальные методы использования кластерного индекса?
Амир Резаи
источник
Рекомендуется использовать даты в кластеризованном индексе, поскольку новые данные всегда добавляются в конец таблицы.
Ральф Винтерс
1
Возможно, но не всегда.
Мрденный
@mrdenny - не могли бы вы уточнить, когда это не так?
Ральф Уинтерс
1
Если строки вводятся не по порядку. Если таблица чаще всего запрашивается первичным ключом. Если первичный ключ представляет собой INT (или меньше) и в таблице будет много некластеризованных индексов, то кластеризованный ключ datetime будет больше и менее эффективен. Если таблица никогда не будет запрошена столбцом даты, то использование ключа кластеризации не будет целесообразным, поскольку будут использоваться только некластеризованные индексы.
Мрденный
@mrdenny: также, если в таблице нет столбца даты (случай подмножества вашего последнего :)
ypercubeᵀᴹ

Ответы:

15

Проще говоря ...

Телефонный справочник: данные - это индекс / индекс - это данные. Чтобы найти тебя, я бы начал с Резаи, например, с Амиром. Внешний поиск не требуется.

В терминах базы данных:

Данные таблицы и кластерный индекс - это одно и то же (в SQL Server также InnoDB, Oracle IOT)

Лучшая практика - узкая, числовая, строго возрастающая (например, столбец IDENTITY или Autonumber). Типы данных, такие как GUID, не очень хорошая идея

Ссылки для чтения (чтобы не раздутый ответ)

Отредактируйте, чтобы полностью объяснить мои лучшие рекомендации, перейдите по ссылке в комментарии Эрика Хамфри: Королева индексации: Кимберли Трипп

ГБН
источник
3
Вам также понадобится блог Кимберли Триппа: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Эрик Хамфри - lotsahelp
1
И в этом заключается проблема применения «наилучшей практики» без контекста. Например, если основным критерием поиска для большой часто просматриваемой таблицы является диапазон дат, лучшим местом для кластерного индекса является дата поиска, а НЕ первичный ключ. Сказать, что таблица и кластерный индекс - это одно и то же, слишком упрощенно. Данные на самом деле хранятся в порядке, определяемом кластерным индексом. Среди прочего, это означает, что кластерные индексы особенно полезны для поиска диапазона, возвращающего полный набор данных.
Рассел Стин
2
@Russell Steen: 1. Я включил ссылки 2. OP должен был спросить, подумайте, на каком уровне я поставил этот ответ на 3. Эрик Хамфри предоставил ссылку для создания. Мы можем разбираться в каждом конкретном случае, что мы, более опытные ребята, знаем и понимаем, но мы здесь, чтобы помочь обучить или подавить ...?
ГБН
Я слышу, что вы говорите. Проблема не в вашем ответе как таковом, а в том, что менее опытные люди, чем вы, бегают и цитируют и применяют что-то, потому что это «лучшая практика» без понимания использования и контекста, для которых была написана лучшая практика - я бы утверждают, что да, мы здесь для того, чтобы обучать, и что цитирование наилучшей практики, не предоставляя больше контекста непосредственно в посте, не приносит такой пользы.
Рассел Стин
2
О, просто заметил SQL-Serverметку, не обращай внимания.
ypercubeᵀᴹ
3

Это индекс для самих данных, так что записи физически сортируются по полю, к которому относится кластерный индекс. Вот почему вы можете иметь только один кластеризованный индекс на таблицу.

Некластерный индекс не так быстр для поиска, но у вас может быть много таких типов индексов в таблице.

kacalapy
источник
3
Некластеризованные индексы могут быть столь же эффективными для поисков, если некластеризованный индекс покрывает рассматриваемый поиск.
Рассел Стин
@Russell Нет никакого способа, которым это может быть быстрее, поскольку индекс принудительно установил фактический порядок сортировки данных. Нет более простого / быстрого способа для SQL или любой СУБД найти нужную информацию.
Какалапы
4
Я не сказал быстрее. В покрывающем индексе все данные, запрашиваемые в элементе select в индексе - IN ORDER, находятся в отдельном месте на диске. Таким образом, выборка по соответствующему индексу покрытия никогда не попадает в таблицу.
Рассел Стин
2
Покрывающий NCI, вероятно, будет меньше, что означает меньше страниц для чтения и быстрее.
Мартин Смит
Причиной наличия только одного кластеризованного индекса в таблице является не физическая сортировка, страницы индекса всегда логически сортируются, и непрерывное распределение страниц не гарантируется. В каждой таблице может быть только один кластеризованный индекс, поскольку кластеризованный индекс - это сама таблица, а некластеризованные индексы - это копии таблицы с необходимыми столбцами.
Манодж Пандей