Добрый день! Подскажите, как правильно создать индексы для такого запроса, чтобы ускорить его выполнение?
select min(price) as min, max(price) as max from `goods`
left join `goods_categories` on `goods`.`id` = `goods_categories`.`product_id`
where (`status` = ?) and (`catid` in (?, ?, ?, ?) or `goods_categories`.`category_id` in (?, ?, ?, ?))
limit 1
Дмитрий Чередниченко, ну вот сделать так, чтобы в "дополнительных" была еще и основная, этим убрать "or", поменять left на inner join, сделать индекс на `goods_categories`.`category_id`
Дмитрий Чередниченко, заменить на union двух запросов, один без джоина, другой с inner join. саму агрегацию натравить на union. индекс по `goods_categories`.`category_id` и другой - по catid
Я так понимаю что главная задача - убрать перемножение таблиц.
По идее должно быть достаточно добавить индекс на product_id.
тогда во второй строке в rows должна появиться единичка
Если это реальные цифры количества строк в таблицах, то больше вообще никакие индексы не нужны.