Как вы определяете индексы на этапе проектирования БД?

У таблицы есть столбцы:
id, uid, interval, data, oldstatus, newstatus, email
В процессе работы выясняется что нужен индексы на id, uid, email составной на interval+data
Далее есть условие:
WHERE oldstatus != newstatus AND email=1
Я не очень понимаю составной индекс на какие поля нужен при таком запросе?

Уже минимум 5 индексов выходит, и я не могу пока знать какой из них насколько часто будет использоваться. Как в этих условиях не пропустить какой-то нужный индекс но и не слишком сильно замедлить время INSERT при росте БД?
Или имеет смысл пока не делать составные индексы, а обойтись простым по каждой колонке?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 2
Settler1
@Settler1
Правильно написанный вопрос - половина ответа
Индексы в основном ставятся на те колонки по которым идет выборка where.
Если ваше условие:
WHERE oldstatus != newstatus AND email=1
то на них и ставьте.

По поводу id, если он у вас primаry – то это и есть индекс, дополнительно навешивать ничего не надо
Ответ написан
@devian3000
Составные индексы вешаются в порядке - уменьшаем выборку - выбираем из оставшегося.
Т.е. если у вас всего два статуса и 1000 email то индекс должен быть (email, status). Дальше по аналогии.

Как выбрать что-то - смотрится по функционалу, и/или по статистике.(Ставьте лог на запросы).

Так же собрать все запросы какие есть. Посмотреть пересечения и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы