Составные индексы базы данных - PullRequest
1 голос
/ 12 января 2011

Я ищу подтверждение моего понимания составных индексов в базах данных - особенно в отношении SQL Server 2008 R2, если это имеет значение.

Мне кажется, я понимаю, что порядок столбцов индекса имеет решающее значение в том смысле, что если у меня индекс { [Name], [Date] }, то SELECT на основе предложения WHERE на основе [Date] не будетможно использовать индекс, но индекс { [Date], [Name] } будет.Если SELECT основан на обоих столбцах, можно использовать любой из индексов.

Это правильно?Каковы преимущества использования такого составного индекса по сравнению с двумя индексами в каждом столбце (т. Е. { [Date] } и { [Name] }).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Не совсем, выборка по дате может по-прежнему использовать индекс, но не так эффективно, как запрос, включающий имя, поскольку имя будет ограничивать объем поиска в индексе.

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

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

3 голосов
/ 12 января 2011

Это правильно.

Составной индекс полезен, когда комбинированная селективность составных столбцов эффективно сокращает набор результатов.

Если вы добавите столбцы «ВКЛЮЧЕНО» в индекс (составной или не составной), вы можете создать «покрывающий» индекс для покрытия запроса (или запросов), что желательно, так как устраняет необходимость выполнения второго поиск для получения этих столбцов (из кластеризованного индекса).

Выбор двух индексов из одного столбца ИЛИ составного индекса из комбинированных столбцов определяется общей рабочей нагрузкой запроса к этой таблице.

...