Это обсуждение не хватает на важный момент: Вопрос не в том случае, если «не ключевые столбцы» лучше включить как индекс -columns или включены -columns.
Вопрос в том, как дорого использовать механизм include для включения столбцов, которые являются , которые действительно не нужны в индексе? (обычно это не часть предложений, но часто включаемых в выборки). Таким образом, ваша дилемма всегда:
- Используйте индекс ID1, ID2 ... IDN одна или
- Используйте индекс ID1, ID2 ... IDN плюс включают col1, col2 ... ColN
Где: id1, id2 ... IDN столбцы часто используются в ограничениях и col1, col2 ... ColN столбцы часто, но обычно не используемые в ограничениях
(Возможность включить все эти столбцы как часть ключа индекса всегда просто глупо (если они также не используются в ограничениях) - потому что всегда будет стоить дороже, поскольку индекс должен обновляться и сортироваться даже когда «ключи» не изменились).
Так используйте вариант 1 или 2?
Ответ: Если ваша таблица редко обновляется - в основном вставляется в/удален - то относительно недорог использовать include-механизм, чтобы включить некоторые «горячие столбцы» (которые часто используются в выбирает - но не часто используется для ограничений), так как вставки/удаления требуют, чтобы индекс обновлялся/сортировался в любом случае, и, таким образом, незначительные дополнительные накладные расходы связаны с сохранением нескольких дополнительных столбцов при обновлении индекса. Накладные расходы - дополнительная память и процессор, используемые для хранения избыточной информации по индексу.
Если столбцы вы считаете добавить в включенные-столбцы часто обновляются (без рубрикации ключ -columns обновляется) - или - если это так много, что индекс становится близким к копия таблицы - используйте вариант 1 Я бы предложил! Кроме того, если добавление определенных столбцов include (-ов) оказывается неэффективным, вы можете пропустить идею их добавления :) Убедитесь, что они полезны!
Среднее количество строк на одинаковые значения в ключах (id1, id2 ... idN) также может иметь значение.
Обратите внимание, что если столбец - который добавляется в качестве включен -column индекса - используется в ограничения: До тех пор, как индекс, как таковой может быть использован (на основе ограничений в отношении index- ключ-columns) - тогда SQL Server сопоставляет ограничение столбца с индексом (значения leaf-node) вместо того, чтобы идти дорогостоящим образом вокруг самой таблицы.
Итак, это будет метод создания менее дорогой версии закрытого индекса? – JMarsch
@gbn, не могли бы вы объяснить это предложение более подробно и объяснить, почему это означает, что предложение include не полезно для сортировки и т. Д.: «Предложение INCLUDE добавляет данные на самом низком/листовом уровне, а не в индекс Это делает индекс меньше, потому что он не является частью дерева « –
@JMarsch: извините за поздний ответ, но да, это именно то, что есть. – gbn