我試圖優化一個很老的查詢,我無法將我的頭包裹起來。我想歸檔的結果是,我想向網上商店推薦其他客戶表示有興趣的訪問者,即他們還與訪問者正在查看的產品一起購買了什麼。查詢客戶已與列出的產品一起購買的商品
我有一個子查詢,但它的很慢,需要~8萬行約15秒。
佈局是放置在用戶籃子中的所有產品都保存在表格wsBasket
中,並由basketid
(在另一個表格中與成員關聯)分隔。
在這個例子中,我想列舉用戶與productid 427一起購買的所有最流行的產品,但不列出productid 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 |
+----+--------------------+----------+------+---------------+------+---------+------+------+----------------------------------------------+
你對wsBasket表有什麼索引?當你對查詢執行EXPLAIN時會得到什麼? – 2010-06-28 11:03:15
你的索引是什麼樣的?知道這可能會幫助您更輕鬆地修改查詢。 – MJB 2010-06-28 11:04:26