我有如下表:多個左連接和性能
產品 - 4500個記錄
字段:ID,SKU,姓名,別名,價格,special_price,數量,說明,照片,MANUFACTURER_ID,MODEL_ID ,命中,出版
products_attribute_rel - 35000個記錄
字段:ID,PRODUCT_ID,attribute_id,attribute_val_id
ATTRIBUTE_VALUES - 243個記錄
字段:ID,attr_id,價值,訂貨
廠商 - 共有29個記錄
字段:ID,標題,出版
模型 - 946條記錄
個字段:ID,MANUFACTURER_ID,標題,發佈
所以我通過一個查詢得到這些表格數據:
SELECT jp.*,
jm.id AS jm_id,
jm.title AS jm_title,
jmo.id AS jmo_id,
jmo.title AS jmo_title
FROM `products` AS jp
LEFT JOIN `products_attribute_rel` AS jpar ON jpar.product_id = jp.id
LEFT JOIN `attribute_values` AS jav ON jav.attr_id = jpar.attribute_val_id
LEFT JOIN `manufacturers` AS jm ON jm.id = jp.manufacturer_id
LEFT JOIN `models` AS jmo ON jmo.id = jp.model_id
GROUP BY jp.id HAVING COUNT(DISTINCT jpar.attribute_val_id) >= 0
該查詢是緩慢的地獄。它需要數百秒的時間來處理它。 那麼如何改進這個查詢呢?有了小數據塊,它可以很好地工作於 。但我猜一切都毀了products_attribute_rel
表,其中 有35000條記錄。
您的幫助,將不勝感激。
編輯SELECT
查詢
EXPLAIN
結果:
您可能需要創建非羣集覆蓋索引。 – 2012-02-22 07:33:13
你使用任何索引方法,如B樹等? – DonCallisto 2012-02-22 07:33:40
在'SELECT'前面放置'EXPLAIN'並顯示結果。這可以幫助我們找出瓶頸是什麼。 – Mike 2012-02-22 07:38:32