Я знаю основные различия между кластерными и некластеризованными индексами и понимаю, как они на самом деле работают. Я понимаю, как кластерные и некластеризованные индексы улучшают производительность чтения. Но я не уверен в одном: по каким причинам я бы предпочел одно другому.
Например: если таблица не имеет кластеризованного индекса, следует ли создавать некластеризованный индекс и каковы преимущества этого
Ответы:
Я просто хочу предупредить: очень внимательно выберите кластерный индекс! Каждая «обычная» таблица данных должна иметь кластерный индекс, поскольку кластерный индекс действительно ускоряет множество операций - да, ускоряет , даже вставляет и удаляет! Но только если вы выберете хороший кластерный индекс.
Это наиболее реплицируемая структура данных в вашей базе данных SQL Server. Ключ кластеризации также будет частью каждого некластеризованного индекса в вашей таблице.
Выбирая ключ кластеризации, следует проявлять особую осторожность - он должен быть:
узкий (идеально 4 байта)
уникальный (в конце концов, это «указатель строки». Если вы не сделаете его уникальным, SQL Server сделает это за вас в фоновом режиме, что будет стоить вам пары байтов для каждой записи, умноженной на количество строк и количество некластеризованных индексов у вас есть - это может стоить очень дорого!)
статический (никогда не меняйте - если возможно)
в идеале постоянно увеличивающийся, поэтому вы не получите ужасную фрагментацию индекса (GUID - полная противоположность хорошему ключу кластеризации - по этой конкретной причине)
он не должен допускать значения NULL и в идеале также фиксированной ширины - a
varchar(250)
делает очень плохой ключ кластеризацииВсе остальное действительно должно быть вторым и третьим уровнем важности после этих пунктов ...
Посмотрите несколько сообщений в блоге Кимберли Трипп ( Королева индексирования ) по этой теме - все, что она написала в своем блоге, абсолютно бесценно - прочтите, усвойте - живите этим!
источник
non clustered
для нас делает index. в чем его важность ..?