Как оптимизировать запрос?

SELECT `product`.`id`, `product`.`name`, `product`.`condition`, `product`.`city_id`,  `product`.`price`,`user`.`name`  AS `user_name`, `city`.`name` AS `city_name`
FROM `product_to_category` `p2c`
JOIN `product` `product` ON product.id = p2c.product_id
LEFT JOIN `city` `city` ON city.id=product.city_id
LEFT JOIN `user` ON user.id=product.user_id
WHERE (
((`product`.`id` in (
					select product_id from product_to_city
					join city on (city.id = product_to_city.city_id)
					where city.id = 1 or city.parent_id = 1
				))) AND

( (`product`.`zombie` = 0)) AND (`product`.`publish` = 1 AND (`product`.`delete` = 0 OR `product`.`delete` is null)))
GROUP BY `product`.`id`
HAVING COUNT(1) > 1
ORDER BY `product`.`timestamp_update` DESC


таблица продукт
e9265d632e.jpg

таблица city
cbeda3a622.jpg

таблица category
8ef88e272e.jpg

таблица product_to_category
463b0c464d.jpg

таблица user
8c253b5dc2.jpg

таблица product_to_city
5267f060b2.jpg

explain
64bcd0fea9.jpg
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Зачем вам подзапрос в where? Eго на inner join заменить можно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Draconian
Oracle Developer
IN почти всегда работает медленней аналогичного кода с = или <>.
Ответ написан
Ваш ответ на вопрос

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

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