opium
@opium
Просто люблю качественно работать

Какие индексы сделать для такого запроса в mysql?

explain select * from class_actions where type like 'newad' or type like 'renewad' and object_id=335046;

Уже есть индекс по полю type и двойной по полям type+object_id

explain показывает что индексы не работают.
  • Вопрос задан
  • 2774 просмотра
Пригласить эксперта
Ответы на вопрос 5
Melkij
@Melkij
PostgreSQL DBA
where type in ('newad','renewad') and object_id=335046
Вот при таком запросе индекс по object_id & type использоваться будет.
Ответ написан
@edogs
Достаточно очевидно что надо повесить индекс на object_id.
Если у Вас type текстовый (иначе зачем лайк), то определенно есть смысл сменить его на enum, тогда и составной (type+object_id) может начать работать (только запрос надо будет переписать с лайка на in ('newad','renewad')
Ответ написан
@galkinrost
Последовательность столбцов в индексе именно (1) type, (2)object_id?

Ради теста поставил два индекса на type(VARCHAR), object_id(int):
type + object_id и object_id + type — explain показывает, что первый работает.
Ответ написан
4dmonster
@4dmonster
like 'newad' or type like 'renewad'
извините, но тут нету подстановочных символов, если полное соответствие — не лучше ли использовать =?
Ответ написан
PQR
@PQR
При использовании OR индесы не работают!
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы