Порядок индекса по нескольким столбцам - PullRequest
20 голосов
/ 03 декабря 2009

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

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

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)

Спасибо за помощь!

Ответы [ 3 ]

23 голосов
/ 03 декабря 2009

В приведенном вами примере порядок столбцов не имеет значения.

Было бы важно, если вы заказываете по колонке; индекс для (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 голосов
/ 03 декабря 2009

Это должно дать вам хорошую идею

Кластерный индекс SQL Server - Порядок индекса Вопрос

Есть еще много таких на SO.

0 голосов
/ 03 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...