正確我不知道爲什麼,但這個查詢需要超過6秒的執行,索引的所有設置都正確,如果我分別運行每個查詢它執行很好,執行時間少於0.5秒。緩慢的MYSQL查詢與使用COUNT的子查詢
下面是該查詢
SELECT c.supplier_id, supplier_name, address1, address2, address3, address4, suppliertype, postcode, contact_name,
(SELECT COUNT(*)
FROM supplier_questions q1
WHERE c.supplier_id = q1.supplier_id AND q1.incomplete = '0') AS questions,
IF (active=1,'Yes', IF (active=2, 'NCR Only','Inactive')) AS rated,
(SELECT COUNT(*)
FROM supplier_questions q2
WHERE c.supplier_id = q2.supplier_id AND q2.reviewed = '1') AS reviewed,
questapproved,
ss.supplier_no AS supplier_no
FROM suppliers c
INNER JOIN supplier_site ss ON c.supplier_id = ss.supplier_id
WHERE c.supplier_id != '0' AND ss.site_id = '2'
GROUP BY c.supplier_id
ORDER BY c.supplier_name ASC
LIMIT 0, 20
的解釋查詢的結果是如下
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY ss ref site_id,supplier_id site_id 4 const 1287 Using where; Using temporary; Using filesort
1 PRIMARY c eq_ref PRIMARY PRIMARY 4 ss.supplier_id 1
3 DEPENDENT SUBQUERY q2 ref supplier_id,reviewed reviewed 4 const 263 Using where
2 DEPENDENT SUBQUERY q1 ref supplier_id,incomplete incomplete 4 const 254 Using where
原因計數查詢是在那裏,是因爲我需要知道那些行數表,這是不能在另一個查詢中完成,因爲結果還需要按這些值排序:(
你能確認c.supplier_name上有一個索引嗎?當你刪除兩個從屬子查詢時,解釋是什麼? – 2011-05-24 10:42:11
請發表CREATE TABLE? – borrel 2011-05-24 10:42:16
supplier_name上沒有索引,但添加後沒有更改。 – Neo 2011-05-24 10:51:35