一尘不染

为什么MYSQL更高的LIMIT偏移量会减慢查询速度?

mysql

简而言之,场景:一个拥有超过1600万条记录[2GB大小]的表。当使用ORDER BY * primary_key
*时,SELECT的LIMIT偏移量越高,查询速度就越慢

所以

SELECT * FROM large ORDER BY `id`  LIMIT 0, 30

花费不到

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30

那只订购30条记录,并且无论如何都相同。因此,这不是ORDER BY的开销。
现在,当获取最新的30行时,大约需要180秒。如何优化该简单查询?


阅读 450

收藏
2020-05-17

共1个答案

一尘不染

通常,较高的偏移量会使查询速度变慢,因为查询需要从第一OFFSET + LIMIT条记录中扣除(并且只提取其中的一条记录LIMIT)。该值越高,查询运行的时间越长。

查询无法直接进行,OFFSET因为,第一,记录的长度可能不同,第二,删除的记录可能会有间隙。它需要检查并计数其途中的每条记录。

假设idPRIMARY KEY一个的MyISAM表,你可以使用这一招加快步伐:

SELECT  t.*
FROM    (
        SELECT  id
        FROM    mytable
        ORDER BY
                id
        LIMIT 10000, 30
        ) q
JOIN    mytable t
ON      t.id = q.id

看到这篇文章:

2020-05-17