limit 10000,20意味着扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行;

查询数据量和偏移量成正比。

优化方法

游标分页

也就是前端传递last_id的那种做法。弊端是cursor方式分页只适合用于有顺序的数据且不支持跳页。

利用子查询或join走覆盖索引

-- 传统limit,文件扫描
[SQL]SELECT * FROM tableName ORDER BY id LIMIT 500000,2;
受影响的行: 0
时间: 5.371s

-- 子查询方式,索引扫描
[SQL]
SELECT * FROM tableName
WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 500000 , 1)
LIMIT 2;
受影响的行: 0
时间: 0.274s

-- JOIN分页方式
[SQL]
SELECT *
FROM tableName AS t1
JOIN (SELECT id FROM tableName ORDER BY id desc LIMIT 500000, 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT 2;
受影响的行: 0
时间: 0.278s

参考

  1. 游标分页
  2. 利用子查询或join走覆盖索引

相关文章:

  • 2021-10-01
  • 2021-11-27
  • 2021-07-30
  • 2021-11-23
  • 2022-01-07
  • 2021-07-02
  • 2022-02-06
  • 2022-01-11
猜你喜欢
  • 2021-12-07
  • 2022-12-23
  • 2021-09-19
  • 2021-11-15
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
相关资源
相似解决方案