頭を包むことができない非常に古いクエリを最適化しようとしています。アーカイブしたい結果は、他の顧客が興味を示したもの、つまり訪問者が見ている製品と一緒に購入したものをWebショップで訪問者に推奨したいということです。
私はサブクエリを持っていますが、それは非常に遅く、〜8 000000行で〜15秒かかります。
レイアウトでは、ユーザーバスケットに入れられるすべての製品がテーブルに保持さwsBasket
れ、basketid
(別のテーブルではメンバーに関連付けられている)で区切られます。
この例では、ユーザーがproductid 427と一緒に購入した最も人気のあるすべての製品をリストしますが、productid427自体はリストしません。
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を使用すると、次のようになります。テーブルにインデックスがないことに注意してください(-フィールドの主キーを除く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 |
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+