减少嵌套mysql查询的时间

时间:2016-08-23 12:48:04

标签: mysql

我有一个嵌套的MySQL查询在表中有关系,每个表中有超过500000条记录。查询需要60秒才能获取结果,并且已在所有表中完成索引。

请建议缩短执行时间。提前谢谢。

{{1}}

3 个答案:

答案 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)