单表5000万行,别再用limit 100000,20 了!三种写法性能天壤之别:
反面教材 (45秒)
sql
SELECT * FROM orders ORDER BY id LIMIT 100000,20;
原理:扫描100020行,丢掉前100000行,返回20行。
游标分页 (10ms)
sql
SELECT * FROM orders WHERE id > 上一页最大id ORDER BY id LIMIT 20;
适用:瀑布流、App首页。
覆盖索引+延迟关联 (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优化 #分页 #性能