我有一个嵌套的MySQL查询在表中有关系,每个表中有超过500000条记录。查询需要60秒才能获取结果,并且已在所有表中完成索引。
请建议缩短执行时间。提前谢谢。
{{1}}
答案 0 :(得分:3)
我之前的评论是:
您应该只订购最终结果集。尝试分析查询 看看造成执行时间长的原因;它很可能是 您拥有的DISTINCT子句,因为它们经常会导致延迟。此外 您可以尝试使用JOIN而不是WHERE ... IN 更快。
未经过测试的代码,但在我之前的评论中,使用JOIN
s的相同查询看起来类似于:
SELECT t1.col1,
t1.col2
FROM table1 t1
INNER JOIN table2 t2 ON t2.col1 = t1.col2
INNER JOIN table3 t3 ON t3.col1 = t2.col2
WHERE t3.col2 = '04'
ORDER BY t2.col1, t3.col1
我希望这样的查询的执行速度明显快于使用WHERE ... IN
。
答案 1 :(得分:2)
IN
子句进行全表扫描。如果您使用inner join
,我相信您会有更好的表现,例如:
SELECT t1.col1,t1.col2
FROM table1 AS t1
INNER JOIN table2 t2
ON t1.col2=t2.col1
INNER JOIN table3 t3
ON t2.col1=t3.col1
WHERE t3.col2 = '04'
ORDER BY t3.col1 ASC,t2.col1 ASC
答案 2 :(得分:0)
您也可以使用像
这样的EXISTS条件Select t1.col1,t1.col2 FROM table1 AS t1 WHERE EXISTS (
Select t2.col1 FROM table2 as t2 where EXISTS (
Select t3.col1 FROM table3 AS t3 where t3.col2 = '04' and t2.col2=t3.col1
) and t1.col2=t2.col1)