Индексы SQL Server для операций Order By - PullRequest
0 голосов
/ 12 июня 2018

У меня есть таблица с 30k строк и более 80 столбцов.Выбор 100 элементов из этой таблицы, упорядоченный по столбцу, является довольно медленной операцией.Добавление индекса только для этого конкретного столбца значительно улучшает запрос.

У меня есть эти запросы, отсортированные по вводу пользователя, и есть 9 вариантов, из которых он может выбирать.

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

1 Ответ

0 голосов
/ 12 июня 2018

Если ваш запрос имеет форму:

select top (100) t.*
from t
order by col;

Тогда индекс на col поможет.SQL Server найдет 100 строк по индексу, а затем вернет остальные столбцы.

Если у вас 9 таких столбцов, то отдельный индекс для каждого из них ускорит запрос.

Если вы можете начать объединение столбцов, индексы помогут только при выборе одного столбца.Итак, рассмотрим следующие пять предложений:

order by col1
order by col1, col2
order by col1, col2, col3
order by col1, col3
order by col1, col3, col2

Чтобы полностью охватить эти order by s, вам понадобятся два индекса - (col1, col2, col3) и (col1, col3, col2).Ведущие столбцы в индексе должны полностью соответствовать столбцам в order by - в том же порядке и без пробелов.

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

...