OceanBase分页查询:3种写法,性能差450倍

单表5000万行,别再用limit 100000,20 了!三种写法性能天壤之别:

:x: 反面教材 (45秒)

sql

SELECT * FROM orders ORDER BY id LIMIT 100000,20;

原理:扫描100020行,丢掉前100000行,返回20行。

:white_check_mark: 游标分页 (10ms)

sql

SELECT * FROM orders WHERE id > 上一页最大id ORDER BY id LIMIT 20;

适用:瀑布流、App首页。

:white_check_mark: 覆盖索引+延迟关联 (0.1秒)

sql

– 先查主键(覆盖索引) SELECT id FROM orders WHERE status=‘COMPLETED’ ORDER BY create_time LIMIT 100000,20; – 再回表 SELECT * FROM orders WHERE id IN (上一步的20个id) ORDER BY create_time;

适用:管理后台必须跳页 + 表很宽。

结论 :选对写法,45秒变0.1秒。

【标签】 #SQL优化 #分页 #性能

6 个赞

666

1 个赞

确实,性能差异巨大

2 个赞

学习了

1 个赞

棒棒

1 个赞

:muscle: :muscle: :muscle: :muscle: :muscle: :muscle:

1 个赞

很好

是的

覆盖索引,性能会更好

666非常棒