微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

较高的偏移量会减慢查询速度是正常的,因为查询需要计算第一OFFSET + LIMIT条记录(并且只LIMIT取它们)。该值越高,查询运行的时间越长。

查询不能正确进行,OFFSET因为,首先,记录的长度可能不同,其次,删除的记录可能存在间隙。它需要在途中检查和计算每条记录。

假设这id是 MyISAM 表的主键,或者是 InnoDB 表上的唯一非主键字段,您可以使用以下技巧加快速度:

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

见这篇文章

解决方法

简而言之:一张包含超过 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 秒。如何优化那个简单的查询?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。