Порядок индексов по нескольким столбцам

Простой вопрос, но имеет ли смысл ваш индекс, когда он охватывает несколько столбцов?

Например, взяв запрос:

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.

Ответ 3

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