J'essaie d'optimiser une très vieille requête que je ne peux pas enrouler ma tête autour. Le résultat que je veux archiver est que je veux recommander au visiteur sur une boutique en ligne ce que d'autres clients ont montré d'intérêt, c'est-à-dire ce qu'ils ont acheté d'autre avec le produit que le visiteur regarde.requête pour ce que les clients ont acheté avec le produit listé
J'ai une sous-requête mais c'est très lente, prend ~ 15s sur ~ 8 000 000 lignes.
la mise en page est que tous les produits qui sont mis dans un panier d'utilisateurs sont conservés dans un tableau wsBasket
et séparés par un basketid
(qui dans une autre table est associée à un membre).
Dans cet exemple, je souhaite répertorier tous les produits les plus populaires que les utilisateurs ont achetés avec le produit 427, mais pas le produit 427 lui-même.
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;
toute aide est très appréciée! espérons que cela a un sens tout au moins une personne :)
MISE À JOUR 1: Merci pour vos commentaires les gars ici sont mes réponses, ils ne correspondaient pas aux commentaires sur le terrain. En utilisant EXPLAIN sur la question ci-dessus j'ai eu le fllowing. S'il vous plaît noter, je n'ai pas d'index sur la table (sauf pour la clé primaire sur le champ id
), je veux modifier la requête pour bénéficier des index et placer des index sur les bonnes clés.
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+
| 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 |
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+
Quels index avez-vous sur la table wsBasket? et qu'obtenez-vous lorsque vous exécutez un EXPLAIN sur la requête? –
À quoi ressemblent vos index? Sachant que cela pourrait faciliter la modification de la requête pour vous. – MJB