Чтобы правильно индексировать ваши данные по производительности, вам нужно понимать ваши данные. Гипотетически, скажем, я создавал таблицу базы данных переписи:
CREATE TABLE CENSUS
(
ID INTEGER NOT NULL,
GENDER CHAR(1) NOT NULL,
FAVOURITEFOOD NVARCHAR(20) NOT NULL,
STATE NVARCHAR(20) NOT NULL
);
Из-за обработки данных я могу знать, что:
- Пол делится на 50% мужчин, 50% женщин
- 60% любят жаркое, 20% вегетарианцы, 20% любят азиатскую еду, 20% любят макароны
- Штат составляет 25% калифорнийцев, 25% Нью-Йорка, а остальные 1% в каждом штате.
Если бы я хотел искать людей мужского пола, которые любят жаркое и живут в Калифорнии, я бы рассмотрел создание многостолбцового индекса, в котором на первом месте стоит STATE (STATE, GENDER, FAVOURITEFOOD). Я делаю FAVOURITEFOOD последним столбцом в индексе. Это связано с тем, что фильтр STATE обрезает данные на 25%, тогда как FAVOURITEFOOD возвращает большую часть базы данных (не лучше, чем полное сканирование таблицы).
Если бы я хотел искать женщин, которые любят вегетарианскую еду и живут в Нью-Йорке, я бы подумал о создании многостолбцового индекса и о том, чтобы сначала поставить FAVOURITEFOOD (FAVOURITEFOOD, STATE, GENDER). Здесь FAVOURITEFOOD сортирует данные на 20%, так что это лучший выбор по сравнению с двумя другими столбцами.
Если я часто выполняю ОБА запросы, какой индекс мне следует сделать? Ответ оба:
CREATE INDEX IX_CENSUS_001 ON CENSUS (STATE, GENDER, FAVOURITEFOOD);
CREATE INDEX IX_CENSUS_002 ON CENSUS (FAVOURITEFOOD, STATE, GENDER);
ANALYZE TABLE CENSUS;
Команда ANALYZE TABLE сохраняет распределение ключей для таблицы. Теперь, когда вы выполните любой запрос, он определит, является ли IX_CENSUS_001 или IX_CENSUS_002 лучшим индексом для плана выполнения.
Если я захочу запустить разные типы запросов, я остановлюсь и снова подумаю о своих данных. Возможно, мне потребуется добавить новый индекс, и мне может понадобиться снова запустить ANALYZE TABLE.
Итак, возвращаясь к вашему сценарию; это зависит от данных, которые у вас есть в ваших таблицах, и запросов, которые вы хотите выполнить для них.