SQL Server - Когда использовать Clustered vs non-Clustered Index?

Я знаю основные различия между кластерными и некластеризованными индексами и понимаю, как они работают. Я понимаю, как кластерные и некластеризованные индексы улучшают производительность чтения. Но я не уверен, что именно поэтому я бы выбрал одну из них.

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

Ответ 1

Я просто хочу сказать слово предупреждения: пожалуйста, очень внимательно выберите свой кластеризованный индекс! Каждая "обычная" таблица данных должна иметь кластеризованный индекс, так как кластеризованный индекс действительно ускоряет множество операций - да, ускоряет, даже вставляет и удаляет! Но только если вы выберите кластерный индекс хороший.

Это наиболее реплицированная структура данных в базе данных SQL Server. Клавиша кластеризации также будет частью каждого некластеризованного индекса в вашей таблице.

При выборе ключа кластеризации следует проявлять особую осторожность: это должно быть:

  • узкий (идеальный 4 байта)

  • уникальный (это "указатель строки" в конце концов. Если вы не сделаете его уникальным, SQL Server сделает это для вас в фоновом режиме, обойдя вас в пару байтов для каждая запись умножает число строк и количество некластеризованных индексов, которые у вас есть - это может быть очень дорого!)

  • static (никогда не меняйте - если возможно)

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

  • он должен быть не нулевым и в идеале также фиксированной шириной - a varchar(250) делает очень плохой кластерный ключ

Все остальное должно быть вторым и третьим уровнем важности за этими моментами.

Смотрите некоторые из блога Kimberly Tripp (The Queen of Indexing) на эту тему - все, что она написала в своем блоге, абсолютно бесценно - прочитайте, переварите это - живите им!