Я пытаюсь оптимизировать очень старый запрос, который я не могу обернуть.результат, который я хочу заархивировать, - это то, что я хочу порекомендовать посетителю интернет-магазина то, что заинтересовало других покупателей, то есть, что они купили вместе с продуктом, на который смотрит посетитель.
у меня есть подзапрос, но он очень медленный, занимает ~ 15 с на ~ 8 000 000 строк.
макет таков, что все товары, помещенные в корзину пользователей, хранятся в таблице wsBasket
и разделены basketid
(который в другой таблице связан с членом).
в этом примере я хочу перечислить все самые популярные продукты, которые пользователи купили вместе с productid 427, но неперечислите сам продукт 427.
SELECT productid, SUM(quantity) AS qty
FROM wsBasket
WHERE basketid IN
(SELECT basketid
FROM wsBasket
WHERE productid=427) AND productid!=427
GROUP by productid
ORDER BY qty
DESC LIMIT 0,4;
любая помощь очень ценится!надеюсь, в этом есть хоть какой-то смысл хоть кому-то:)
ОБНОВЛЕНИЕ 1: спасибо за ваши комментарии, ребята, вот мои ответы, они не подходятполе комментариев.
Используя EXPLAIN для вышеприведенного запроса, я получил fllowing.Обратите внимание, что у меня нет никаких индексов в таблице (кроме первичного ключа в id
-поле), я хочу изменить запрос, чтобы использовать индексы и размещать индексы на правильных ключах.
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+
| 1 | PRIMARY | wsBasket | ALL | NULL | NULL | NULL | NULL | 2821 | Using where; Using temporary; Using filesort |
| 2 | DEPENDENT SUBQUERY | wsBasket | ALL | NULL | NULL | NULL | NULL | 2821 | Using where |
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+