Разница между созданием индекса с двумя столбцами и созданием отдельного индекса на двух столбцах

В чем разница между созданием индекса с двумя столбцами и созданием отдельного индекса по двум столбцам?

Разница между

create nonclustered index ix_index1 on table1(col1)
create nonclustered index ix_index2 on table1(col2)

а также

create nonclustered index ix_index1 on table1(col1, col2)

1 ответ

Решение

Вы можете почувствовать разницу, если у вас есть какие-либо запросы, которые выбираются на основе col2 в одиночестве.

SELECT (list of columns)
FROM dbo.YourTable
WHERE col2 = 'someValue'

Если у вас есть два отдельных индекса, то есть вероятность, что ix_index2 может быть использован для ускорения этого запроса.

Однако, если у вас есть только составной индекс на (col1, col2)тогда этот индекс никогда не может быть использован для этого запроса. Составной индекс можно использовать только в том случае, если в запросе указываются n крайних левых столбцов.

Таким образом, ваш составной индекс может быть использован

  • если ваш запрос использует оба col1 а также col2 в WHERE пункт
  • если ваш запрос использует только col1 в WHERE пункт

но он НИКОГДА не может быть использован, если ваш запрос использует только col2 в WHERE пункт

Другие вопросы по тегам