2010-11-25 4 views
2

У меня есть таблица (хранит данные форума, обычно не редактируются и не обновляют только вставку), на которой у меня есть столбец первичного ключа, который, как мы знаем кластеризованный индекс. скажите, пожалуйста, получу ли какое-либо преимущество, если я создам некластеризованный индекс в этом столбце (столбец первичного ключа)?Что такое преимущества некластеризованного индекса над первичным ключом (кластерный индекс)

EDIT: мой стол имеет в настоящее время около 60000 записей, что лучше будет размещать на нем некластеризованный индекс или создавать одну и ту же новую таблицу и создавать индекс, а затем копировать записи из старой в новую таблицу.

Благодаря

+1

Возможный дубликат [В чем разница между кластерным и некластеризованным индексом?] (Http://stackoverflow.com/questions/91688/what-are-the-differences-between-a-cllustered-and -a-non-clustered-index) – 2010-11-25 10:02:30

+0

@Ardman: Это не дублирует это, я знаю разницу между кластерными и некластеризованными, но хочет предложения для моей конкретной ситуации. – 2010-11-25 10:13:18

+0

Комментируя ваше редактирование на вопрос: вам нужно просто добавить новый индекс в существующую таблицу, посмотрите на команду ALTER TABLE. 60 000 строк не так много, и для создания индекса не требуется много времени. – Tony 2010-11-25 10:16:58

ответ

6
  • Каждая таблица должна иметь кластерный индекс
  • некластерированных индексы позволяют ВКЛЮЧАЕТ, который является очень полезным
  • некластерированных индексы позволяют фильтрации в SQL Server 2008+

Примечания:

  • Основной ключ - это ограничение, которое по умолчанию является кластеризованным индексом
  • один кластерный индекс только, многие некластеризованные индексы
3

одно преимущество: вы можете INCLUDE другие столбцы в индексе.

3

Кластерный индекс определяет порядок физического хранилища данных таблицы (поэтому может быть только один кластерный индекс в таблице).

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

С другой стороны, поиск индекса в ключевом столбце будет, как правило, медленнее, поскольку поисковые запросы не могут использовать преимущества кластерного индекса.

0

Единственное возможное преимущество, которое я вижу, может быть связано с тем, что записи на листовых страницах некластеризованного индекса не такие широкие. Они содержат только столбцы индекса, а листовые страницы кластерного индекса - это фактические строки данных. Поэтому, если вам нужно что-то вроде select count (your_column_name) из your_table, тогда сканирование некластеризованного индекса потребует значительно меньшего количества страниц данных. Или, если число столбцов индекса больше единицы, и вы запускаете любой запрос, который не нуждается в данных из неиндексированных столбцов, то снова некластеризованное сканирование индекса будет быстрее.

Смежные вопросы