Как я могу оптимизировать этот запрос?
Вы можете сделать индекс покрытия:
CREATE INDEX ix_table1_456__123 ON table1 (col4, col5, col6) INCLUDE (col1, col2, col3)
и запрос не будет даже делать табличный.
Если я добавляю индексы для каждого столбца в предложении where, это имеет значение?
Это, скорее всего, улучшит запрос по сравнению с отсутствием индексов вообще, но создание составного индекса с покрытием, скорее всего, будет лучше.
Однако, если каждый из ваших столбцов имеет высокую мощность (то есть UNIQUE
или рядом с ним), то создание отдельных индексов может даже улучшить запрос по сравнению с составным индексом.
Это особенно верно, если некоторые из колонок имеют большой размер (например, VARCHAR(400)
), а другая, небольшая колонка имеет высокую мощность.
Если у меня есть 10 столбцов в where where, должны ли все из этих 10 столбцов иметь индекс в них?
Если у вас есть 10
колонки, там, как я уже говорил выше, компромисс между увеличением размера ключа (что снижает производительность) и повышенной селективностью.
Если, скажем, первые 3
столбцы уникальны или почти уникальны, то добавление дополнительных столбцов не будет увеличивать селективность, но увеличит размер ключа.
Индекс станет больше по размеру, что потребует дополнительного времени для поиска в нем.
Вы не должны создавать индекс во всех столбцах 10
, если столбцы 3
предлагают избирательность, которая достаточно высока, так как перемещение большего индекса будет дороже, чем чтение некоторых дополнительных ключей.
Вы можете прочитать эту статью в своем блоге:
Index работает как волшебство !! Спасибо .... но просто любопытно, есть ли другие способы, которые мы можем использовать, чтобы сделать такой запрос быстрее? – Bhaskar
@Bhaskar: Да, вы можете пойти дальше. Проанализируйте план выполнения, чтобы узнать, что он занимает больше всего времени. Самый эффективный индекс зависит от того, какие данные содержит таблица и насколько она изменяется. Если у вас много вложений/обновлений/удалений в таблице, вы должны проверить фрагментацию индекса и указать коэффициент заполнения, если индекс имеет тенденцию к фрагментации. – Guffa