Если у меня есть два столбца в таблице, и я планирую делать много запросов в этих двух столбцах (что обычно предполагает создание индекса с несколькими столбцами), но я также знаю, что каждое уникальное значение в первом столбце будет иметь только От 3 до 5 значений во втором столбце - это многоколоночный индекс, который все еще стоит того, что он имеет индекс в первом столбце? Предположим, что меня не интересует стоимость создания индекса, меня строго интересует степень, в которой индекс с несколькими столбцами будет увеличивать скорость запроса по индексу только для первого столбца.
Проблема заключается в том, может ли индекс нескольких столбцов охватывать запрос или, по крайней мере, предложение where
(при условии, что ваши запросы относятся к фильтрации в предложении where
).
В общем, ответ - да. Рассмотрим данные, которые выглядят следующим образом:
x y datapage
a 1 datapage_1
a 2 datapage_2
a 3 datapage_3
b 1 datapage_4
. . .
Если ваш запрос:
select x, y
from t
where x = 'a' and y = 2;
Затем, без индекса, база данных должна проверять все страницы данных, чтобы найти соответствующие строки.
С индексом только на x
база данных может находить все значения "a", но для получения значений y
она должна загружать три страницы данных.
С индексом для x
и y
база данных может напрямую перейти к "datapage_2".