Производительность SQL Server: некластерный индекс + столбцы INCLUDE по сравнению с Кластерным индексом - эквивалентный?

Привет эксперты по механизму SQL Server; совместно используйте с нами немного своего понимания...

Насколько я понимаю столбцы INCLUDE на некластерном индексе позволяют дополнительным, неключевым данным быть снабженными индексными страницами.

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

Однако начиная со столбцов INCLUDE, живых в некластерном индексе, следующее может запросить, как ожидать, будет иметь по существу ту же производительность через сценарии 1 и 2, так как все столбцы могли быть получены от индексных страниц в сценарии 2 вместо того, чтобы когда-либо обратиться к страницам данных таблицы?

ЗАПРОС

SELECT A, B, C FROM TBL ORDER BY A

СЦЕНАРИЙ 1

CREATE CLUSTERED INDEX IX1 ON TBL (A, B, C);

СЦЕНАРИЙ 2

CREATED NONCLUSTERED INDEX IX1 ON TBL (A) INCLUDE (B, C);
7
задан Tahbaza 2 August 2010 в 01:36
поделиться

2 ответа

В этом примере вы действительно можете получить лучшую производительность с некластеризованным индексом. Но это действительно зависит от дополнительной информации, которую вы не предоставили. Вот некоторые мысли.

SQL Server хранит информацию на страницах по 8 КБ; это включает данные и индексы. Если ваша таблица включает только столбцы A, B и C, то данные будут храниться примерно на том же количестве страниц данных и страниц некластеризованного индекса. Но если в таблице больше столбцов, для данных потребуется больше страниц. Количество индексных страниц не изменится.

Таким образом, в таблице с большим количеством столбцов, чем требуется вашему запросу, запрос будет лучше работать с некластеризованным покрывающим индексом (индекс со всеми столбцами). Он сможет обработать меньше страниц, чтобы вернуть желаемые результаты.

Конечно, разницы в производительности можно не заметить, пока вы не получите очень большое количество строк.

3
ответ дан 7 December 2019 в 05:16
поделиться

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

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

5
ответ дан 7 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: