У меня есть таблица с примерно 19 столбцами, которая содержит разумно большой объем данных и в основном запрашивается для извлечения данных с помощью операторов выбора на основе другого предложения where. Поскольку эта таблица в основном запрашивается для получения данных, я подумал о создании некластеризованных индексов на основе различных предложений where, используемых в запросах. Кроме того, все запросы на получение возвращают все столбцы в таблице как часть списка выбора. Исходя из приведенной выше информации, у меня есть два вопроса по выбору индексов:
где [col_a] = {значение} и [col_b] = {значение}
[col_b] = {значение} и [col_a] = {значение}
[col_a] = {значение} и [col_c] = {значение} и [col_d] = {значение}
[col_a] = {значение} и [col_c] = {значение}
Я создал следующие некластеризованные индексы для таблицы как
[col_a] и [col_b] -> Будет ли первый ИП по-прежнему использовать этот индекс, когда заказы меняются
[col_a] и [col_c] и [col_d] -> Будет ли последний ИП использовать этот индекс, так как первые два столбца соответствуют порядку
Кроме того, должны ли мы пойти дальше и попытаться определить некластеризованные индексы на основе предложений filter / join для получения SP в таблице?
1: порядок столбцов индекса не имеет значения, если в запросе используются оба столбца (либо в предложении WHERE, либо в условии JOIN).
2: Можно использовать частичный индекс, считая слева: (a, b) можно использовать при поиске по а в одиночестве.
Поскольку столбец A используется во всех 4 запросах, я предлагаю вам всегда включать его в свои индексы.
Затем столбцы A и C также используются вместе, так что получается ваш второй индекс:
IX_1 (col_a, col_b)
IX_2 (col_a, col_c, col_d)
должен дать вам оптимальную производительность.
Я предполагаю, что один из этих столбцов является PK - если нет, вам нужно создать его.
Индексы Coverig, включающие все столбцы, - очень плохая идея, потому что поиск PK намного дешевле, чем накладные расходы, связанные с необходимостью поддерживать 2 полные копии данных таблицы.
Покрывающий индекс, включающий все столбцы, конечно же, является копией всей таблицы.