Производительность индекса SQL Server для объединений - PullRequest
1 голос
/ 11 февраля 2011

У меня есть 2 таблицы, Items и ItemDetails. Обычно любой запрос к этим данным выполняется через представление Items_join_ItemDetails, которое объединяет две таблицы в общем поле ItemID.

В настоящее время ItemDetails имеет кластеризованный индекс (Date, ItemID) и некластеризованный индекс только ItemID. Предметы имеют кластерный индекс по ItemID.

Когда представление запрашивается, оно почти всегда относится к диапазону дат, поэтому кластерный индекс имеет значение Date для ItemDetails. Однако это означает, что представление должно объединяться с использованием некластеризованного индекса ItemID для ItemDetails.

Будет ли производительность лучше, если я переключу кластеризованные и некластеризованные индексы для ItemDetails? Я вижу, как это поможет операции соединения, но я также вижу, как это повредит фильтрации даты по запросам.

1 Ответ

3 голосов
/ 11 февраля 2011

Кластерный индекс превышает 2 столбца, поэтому соединение по ItemID должно исходить из этого индекса. Индекс NC только для ItemID может быть не использован, по крайней мере, для этого запроса.

Что важнее, так это убедиться, что индексы охватывают : все необходимые столбцы находятся в индексах.

Есть ли у вас проблемы с производительностью?

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

...