分页查询也是平时业务中常见的技能点,在数据不明显时可以直接使用limit语句。当数据量来到以万为单位的时候,显然普通的语句不足以支撑业务场景了。那么今天就详细记录一下常见的分页查询的优化策略!
limit语法
SELECT [list] FROM [table] WHERE [condition] LIMIT(low,offset)
第一个参数指定第一个返回记录行的偏移量,注意从0开始
第二个参数指定返回记录行的最大数目
如果只给定一个参数:它表示返回最大的记录行数目
第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行
初始记录行的偏移量是 0(而不是 1)
- 普通查询
select * from table_a where sex = 1 limit 1000, 100
表示 查询第1000条后的10条数据
性能会随着偏移量(第一个参数)的数值增大而降低 - 子查询优化
- 适用于id自增 建立唯一索引
- 原理 利用索引快速定位偏移位置的 id,然后往后查询
- select * from table_a where sex = 1 and
id>=(select id from orders_history where sex = 1 limit 100000,1) limit 100;
- id限定优化
- 适用于id自增 建立唯一索引
- 原理 根据查询的页数和查询的记录数可以算出查询的id的范围
- select * from table_a where id >= 1000001 limit 100
- 分库分表
总结
优化手段不同,但是原理都是利用索引的快速查找。所以要注意被优化sql执行是否会走索引