我的查询运行得太慢.....
有什么方法可以加快速度吗?
SELECT SQL_CALC_FOUND_ROWS a.*, b.*, c.*, d.*, e.*, f1.*, st6.*
FROM tbl_a a
LEFT JOIN tbl_b b ON a.m_id = b.m_id
LEFT JOIN tbl_c c ON a.ms_id = c.ms_id
LEFT JOIN tbl_d d ON a.gd_id = d.gd_id
LEFT JOIN tbl_e e ON a.sd_id = e.sd_id
LEFT JOIN tbl_f f1 ON a.tp_id = f1.tp_id
LEFT JOIN
(
SELECT g.*, GROUP_CONCAT(f2.tp_name SEPARATOR ',') tp_name, f2.tp AS tp
FROM tbl_g g
LEFT JOIN tbl_f f2 ON g.tp_id = f2.tp_id
GROUP BY s_id
)st6 ON st6.s_id = a.s_id
答案 0 :(得分:0)
除非您有特定原因,否则请勿使用LEFT
。我在这里看不到任何暗示。
如果这样的查询能够首先执行子查询 ,则最佳优化。然而,' LEFT'是暗示它不可能。删除所有LEFT并查看它是否足够快和给出"对"答案。
检查以下两个指示表中的gd_id上是否有PRIMARY KEY
或INDEX
。 (并为其他JOIN做同样的事。)
JOIN tbl_d d ON a.gd_id = d.gd_id
如果您仍需要帮助,请为每张表提供SHOW CREATE TABLE
。并EXPLAIN SELECT ...;
。