MySQL查询中LIMIT的大offset导致性能低下浅析
16lz
2021-12-25
前言
我们大家都知道,mysql查询使用select命令,配合limit,offset参数可以读取指定范围的记录,但是offset过大影响查询性能的原因及优化方法
我们在业务系统中难免少不了分页的需求。想到分页的时候,大家肯定会想到使用SQL中的LIMIT来实现。但是,如果不正确的使用LIMIT会导致性能问题(SQL执行得很慢、有可能会拖垮服务器),也会被领导批的;所以,我们来看看如何正确地使用LIMIT。
下面话不多说了,来一起看看详细的介绍吧
LIMIT OFFSET, ROW_COUNT 实现分页
存在性能问题的方式
SELECT * FROM myTable ORDER BY `id` LIMIT 1000000, 30
LIMIT 1000000, 30 的意思是:扫描满足条件的1000030行,扔掉前面的1000000行,然后返回最后的30行。
较好的方式
SELECT t.*FROM ( SELECT id FROM myTable ORDER BY id LIMIT 1000000, 30 ) qJOIN myTable tON t.id = q.id
- 子查询只用到了索引列,没有取实际的数据,所以不涉及到磁盘IO,所以即使是比较大的 offset,查询速度也不会太差。
对具体的原理分析感兴趣的朋友可以看看这篇文章:MySQL ORDER BY / LIMIT performance: late row lookups
后记
未完待续。
参考资料
- Why does MYSQL higher LIMIT offset slow the query down?
- MySQL ORDER BY / LIMIT performance: late row lookups
总结
更多相关文章
- android 下写文件性能测试
- [android]android性能测试命令行篇
- Android中对后台任务线程性能的说明及优化
- Android特性
- Android(安卓)开发性能优化简介
- 性能优化之Java(Android)代码优化
- 【Android(安卓)Linux内存及性能优化】(八) 系统性能分析工具
- 微信小程序性能分析Trace工具
- 性能优化之Java(Android)代码优化