#sql-server #database #indexing
#sql-сервер #База данных #индексирование
Вопрос:
У меня есть таблица с 3 столбцами: «Id», «A», «B». Все они доступны для поиска. Идентификатор — это идентификатор, который используется только для поиска точных строк, чтобы все было понятно. Но у меня есть сомнения по поводу «А» и «Б». У меня есть 3 случая для поиска в моем приложении: поиск по «A», поиск по «B» и поиск по «A» и «B» одновременно. Поэтому я не уверен, какой тип индекса выбрать. Должен ли я использовать два индекса с одним столбцом или один многоколоночный? Или, может быть, лучше объединить одностолбцовые индексы с многостолбцовыми (всего 3 индекса)? Меня действительно не волнует продолжительность ВСТАВКИ / ОБНОВЛЕНИЯ / УДАЛЕНИЯ, мой целевой приоритет — сделать ВЫБОР как можно быстрее. Я использую SQL Server 2017. Спасибо.
Ответ №1:
Я думаю, двух дополнительных индексов будет достаточно:
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
amp; 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)
. Может быть, так будет лучше.