https://javaguide.cn/database/mysql/mysql-high-performance-optimization-specification-recommendations/

limit-分页 优化

  • limit 10000 1 看似就查询了一条数据,实际上是查询了一万零一条数据。
    • 如果数据库里存在一个有着顺序的列(顺序倒序均可) 那我们查询一次分页,将该列的字段值保存起来,下次分页直接使用条件替代分页,如id>1000 limit 1
      • 不过这种方式存在一个弊端,就是不支持跨页操作,不过也可以改进,提供2种分页方式,如果查询的页数是相邻的页数,就使用条件,否则就直接limit 。结果返回时记得更新保存的条件值
  • 还有一种方式:使用子查询和直接limit查出来条件值(该条件值必须是索引列,否则没有意思,直接limit还是很慢),再根据子查询条件值进行条件分页
    1. select * from where id > ( select id from order by id limit 10000 1) limit 20;

    sql的性能排查与优化

    链接 ```sql 不做列运算,把计算都放入各个业务系统实现;

查询语句尽可能简单,大语句拆小语句,减少锁时间;

不使用 select * 查询;

or 查询改写成 in 查询;

不用函数和触发器;

避免 %xx 查询;

少用 join 查询;

使用同类型比较,比如 ‘123’ 和 ‘123’、123 和 123;

尽量避免在 where 子句中使用 != 或者 <> 操作符,查询引用会放弃索引而进行全表扫描;

列表数据使用分页查询,每页数据量不要太大。 ```