Покрывает ли индекс дублирующие данные?

Предположим, у нас есть этот индекс

CREATE INDEX IX_test ON t1(c1) INCLUDE (c2)

Означает ли это, что у нас будет индекс c2 как на странице индекса, так и на странице фактических данных? Реальный вопрос - означает ли обновление c2, что SQL Server должен будет обновить IX_test и фактическую строку данных (кластерный индекс)?

2 ответа

Решение

Да, точно так же, как включение любого поля в индекс дублирует данные. И все индексы (индексы), которые включают поле, должны обновляться при изменении поля.

Поэтому, когда вы расширяете индекс для охвата запроса (или более 1), вы дублируете данные. Это всегда торговля.

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

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

// редактировать: я вижу, я понял это по-другому. Дело в том, что если вы обновляете столбец, вы должны обновить: 1) кластеризованный индекс 2) все некластеризованные индексы, содержащие этот столбец

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

Другие вопросы по тегам