0
我有一個SQL查詢,我正在努力優化。它基本上用於拉回購物車的產品。每個產品都使用多個表product_tag附加了標籤,並且我還從一個單獨的商店表中拉回了一個商店名稱。我使用group_concat來獲取顯示標籤列表(這就是爲什麼我在底部有奇怪的groupby orderby子句),我需要通過dateadded命令,先顯示最新的預定產品。這裏是查詢....MySql產品標籤查詢優化
SELECT `products`.*, `stores`.`name`, GROUP_CONCAT(tags.taglabel ORDER BY tags.id ASC SEPARATOR " ") taglist
FROM (`products`)
JOIN `product_tag` ON `products`.`id`=`product_tag`.`productid`
JOIN `tags` ON `tags`.`id`=`product_tag`.`tagid`
JOIN `stores` ON `products`.`cid`=`stores`.`siteid`
WHERE `dateadded` < '2010-05-28 07:55:41'
GROUP BY `products`.`id` ASC
ORDER BY `products`.`dateadded` DESC
LIMIT 2
不幸的是即使有一小部分數據(3標籤和約12產品)查詢運行00.0034秒。最終我想要在這個系統中有大約2000個產品和50個tags(即時猜測這將是非常slooooow)。這裏是ExplainSql ...
id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra
1|SIMPLE|tags|ALL|PRIMARY|NULL|NULL|NULL|4|Using temporary; Using filesort
1|SIMPLE|product_tag|ref|tagid,productid|tagid|4|cs_final.tags.id|2|
1|SIMPLE|products|eq_ref|PRIMARY,cid|PRIMARY|4|cs_final.product_tag.productid|1|Using where
1|SIMPLE|stores|ALL|siteid|NULL|NULL|NULL|7|Using where; Using join buffer
任何人都可以幫忙嗎?
猜測不好。如果您想知道系統如何使用2000個產品和50個標籤執行,請生成大量樣本數據。生成10K樣本事務,並使用MySQL的EXPLAIN'查詢'對樣本運行查詢。重複100K和1M交易。 – 2011-03-01 12:20:19