前言

我们大家都知道,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

总结

更多相关文章

  1. android 下写文件性能测试
  2. [android]android性能测试命令行篇
  3. Android中对后台任务线程性能的说明及优化
  4. Android特性
  5. Android(安卓)开发性能优化简介
  6. 性能优化之Java(Android)代码优化
  7. 【Android(安卓)Linux内存及性能优化】(八) 系统性能分析工具
  8. 微信小程序性能分析Trace工具
  9. 性能优化之Java(Android)代码优化

随机推荐

  1. Android 面试题
  2. Ubuntu上开发Android
  3. Android - 开发者应该深入学习的10个开源
  4. Android之Android(安卓)N多窗口
  5. Android之——多线程断点续传下载示例
  6. Android基础_页面布局_TableLayout(表格
  7. Android之AsyncTask异步任务详解总结
  8. 20180502_从零开始的android持久库room其
  9. Android 推送通知指南
  10. Android(安卓)控件框架