分页查询sql优化

508 阅读1分钟

分页查询也是平时业务中常见的技能点,在数据不明显时可以直接使用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执行是否会走索引