Индекс по столбцам или по нескольким столбцам (-ям)? - PullRequest
1 голос
/ 21 апреля 2019

У меня есть таблица с 3 столбцами: «Id», «A», «B».Все они доступны для поиска.Идентификатор идентичен и используется только для поиска точных строк, поэтому он понятен.Но у меня есть сомнения по поводу «А» и «Б».У меня есть 3 случая для поиска в моем приложении: поиск по «A», поиск по «B» и поиск по «A» и «B» одновременно.Так что я не уверен, какой тип индекса выбрать.Должен ли я использовать два одноколоночных индекса или один многоколонный?Или, может быть, лучше комбинировать индексы с одним столбцом с несколькими столбцами (всего 3 индекса)?Меня не волнует длительность INSERT / UPDATE / DELETE, моя цель - сделать SELECT как можно быстрее.Я использую SQL Server 2017. Спасибо.

1 Ответ

0 голосов
/ 22 апреля 2019

Я думаю, что двух дополнительных индексов будет достаточно:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) -- the first column here which has more different values
CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A)

Если у вас есть другие столбцы в этой таблице, вы можете создать включенные индексы:

CREATE INDEX IDX_YourTable_AB ON YourTable(A,B) INCLUDE(C,D,E,...)
CREATE INDEX IDX_YourTable_B ON YourTable(B) INCLUDE(A,C,D,E,...)

Индекс IDX_YourTable_AB может использоваться для условий WHERE A='...' или WHERE A='...' AND B='...' или WHERE A LIKE '...%' AND B='...' - используется только столбец A или A & B столбцы.

Индекс IDX_YourTable_B может использоваться для условий только с столбцом B (WHERE B='...' или WHERE B LIKE '...%').

Также попробуйте проверить CREATE INDEX IDX_YourTable_BA ON YourTable(B,A) вместо CREATE INDEX IDX_YourTable_B ON YourTable(B)INCLUDE(A). Может быть, так будет лучше.

...