https://javaguide.cn/database/mysql/mysql-high-performance-optimization-specification-recommendations/
limit-分页 优化
- 如
limit 10000 1
看似就查询了一条数据,实际上是查询了一万零一条数据。- 如果数据库里存在一个有着顺序的列(顺序倒序均可) 那我们查询一次分页,将该列的字段值保存起来,下次分页直接使用条件替代分页,如
id>1000 limit 1
- 不过这种方式存在一个弊端,就是不支持跨页操作,不过也可以改进,提供2种分页方式,如果查询的页数是相邻的页数,就使用条件,否则就直接limit 。结果返回时记得更新保存的条件值
- 如果数据库里存在一个有着顺序的列(顺序倒序均可) 那我们查询一次分页,将该列的字段值保存起来,下次分页直接使用条件替代分页,如
- 还有一种方式:使用子查询和直接limit查出来条件值(该条件值必须是索引列,否则没有意思,直接limit还是很慢),再根据子查询条件值进行条件分页
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 子句中使用 != 或者 <> 操作符,查询引用会放弃索引而进行全表扫描;
列表数据使用分页查询,每页数据量不要太大。 ```