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

本教程将介绍为什么 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

为什么 MYSQL 更高的 LIMIT 偏移量会减慢查询速度? 教程 第1张

问题描述

简而言之:一张包含超过 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 秒.怎么优化这个简单的查询?

推荐答案

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

查询不能直接到 OFFSET 因为,首先,记录的长度可能不同,其次,删除的记录可能存在间隙.它需要在途中检查和统计每条记录.

假设 id 是 MyISAM 表的主键,或者是 InnoDB 表上唯一的非主键字段,你可以使用这个技巧来加速它:

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

见这篇文章:

MySQL ORDERBY/LIMIT 性能:延迟行查找

好了关于为什么 MYSQL 更高的 LIMIT 偏移量会减慢查询速度?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。