首页 > 解决方案 > 如何加快sql查询?

问题描述

我有一个 SQL 查询如下:

SELECT p.Id1,p.Id2,p.Id3 
FROM dataset1 p
WHERE p.Id2 IN (
    SELECT r.Id4 
    FROM dataset1 r 
    WHERE r.Id5=125 AND r.Id6>=100000000000000 AND r.Id6<1000000000000000
) 
ORDER BY p.Id1 DESC, p.Id2 DESC

然而,在这个范围内似乎有大量 Id6 的数据,因此计算需要相当长的时间。但我只有一小时来计算查询。因此,我想知道是否有人可以帮助我提高此查询的性能。

谢谢。

标签: mysqlsqlsubqueryquery-optimization

解决方案


由于过滤似乎是在 上完成的r,所以先安排一下:

SELECT  p.Id1, p.Id2, p.Id3
    FROM  ( SELECT id4
       FROM dataset1 AS r
       WHERE  r.id5 = 125
         AND  r.Id6 >= 100000000000000
         AND  r.Id6 <  100000000000000 ) AS x
    JOIN dataset1 AS p  ON p.id2 = x.id4
    ORDER BY  p.Id1 DESC, p.Id2 DESC;

为此,这些索引应该是有益的:

INDEX(id5, id6, id4)   -- covering
INDEX(id2, id1, id3)   -- covering

您对 进行了“范围”测试id6,但范围为空。我认为这是一个错误。请不要过分简化查询;我们可能会给您不适用的建议。我假设范围确实是一个范围。


推荐阅读