Порядок индексов по нескольким столбцам
Простой вопрос, но имеет ли смысл ваш индекс, когда он охватывает несколько столбцов?
Например, взяв запрос:
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2)
Если я хочу добавить индекс для такого запроса, имеет ли значение, если мой индекс создается следующим образом:
CREATE INDEX my_index
ON my_table (column_1, column_2)
Или вот так:
CREATE INDEX my_index
ON my_table (column_2, column_1)
Спасибо за помощь!
Ответы
Ответ 1
В приведенном примере порядок столбцов не имеет значения.
Было бы важно, если вы закажете на столбе; индекс (col1,col2)
можно использовать для ORDER BY col1, col2
, но не для ORDER BY col2, col1
.
В разделе WHERE
индекс (col1, col2)
работает для WHERE col1 = 1 AND col2 = 1
. Он также работает для WHERE col1 = 1
. Но это не может помочь с WHERE col2 = 1
.
Ответ 2
Этот shoudl дает вам хорошую идею
Кластерный индекс SQL Server - порядок указательного вопроса
На SO есть еще много.
Ответ 3
Лучший способ узнать - измерить его. Попробуйте, измерьте производительность, затем удалите этот индекс и попробуйте другой. Как правило, вы хотите, чтобы данные, которые были запрошены вместе, лежали близко друг к другу в индексе на диске, а порядок столбцов в индексе имеет значение для того, как индекс хранится на диске. Очень сложно догадаться, какая комбинация индексов будет работать лучше всего, поэтому попробуйте несколько разных возможностей и измерить, чтобы узнать, что лучше для ваших данных.