2012-12-21 171 views
1

我有一個MySQL查詢到13秒執行是有什麼辦法可以減少執行時間在這裏是在查詢的每個原子部分解釋優化MySQL查詢

EXPLAIN 
SELECT SQL_CALC_FOUND_ROWS st.store_id as st_id, `st`.`store_id` 
FROM `store` AS `st` 
LEFT JOIN `coupon` AS `cp` ON st.store_id = cp.store_id 
LEFT JOIN `deal` AS `dl` ON st.store_id = dl.store_id 
LEFT JOIN `store_category_relations` AS `scr` ON st.store_id = scr.store_id 
GROUP BY `st`.`store_id`; 

+----+-------------+-------+-------+-----------------------+-----------------------+---------+---------------------+------+-------------+ 
| id | select_type | table | type | possible_keys   | key     | key_len | ref     | rows | Extra  | 
+----+-------------+-------+-------+-----------------------+-----------------------+---------+---------------------+------+-------------+ 
| 1 | SIMPLE  | st | index | NULL     | PRIMARY    | 4  | NULL    | 1 | Using index | 
| 1 | SIMPLE  | cp | ref | store_id    | store_id    | 4  | sonicqa.st.store_id | 5 | Using index | 
| 1 | SIMPLE  | dl | ref | idx_deal_fid_store_id | idx_deal_fid_store_id | 4  | sonicqa.st.store_id | 287 | Using index | 
| 1 | SIMPLE  | scr | ref | store_id    | store_id    | 4  | sonicqa.st.store_id | 2 | Using index | 
+----+-------------+-------+-------+-----------------------+-----------------------+---------+---------------------+------+-------------+ 
4 rows in set (0.00 sec) 
+0

store_id(s):它們是否在所有表格中編制索引? –

+0

如果我正確地讀取了SQL,它只是從不同的第一個表中取回store_id,而剩下的其他表將與其他表無關。 – Kickstart

+0

是的,他們被索引在所有表 –

回答

0

Using index ...沒有臨時文件,不是遍歷所有行...

您可能已經有了最快的解決方案。

雖然有一個問題:您是使用InnoDB還是其他數據庫引擎?

+1

這應該是評論不回答。 –

+0

是的,都是InnoDB。 –