针对于大数据量查询,我们一般使用分页查询,查询出对应页的数据即可,这会大大加快查询的效率;

在排序和分页同时进行时,我们一定要注意效率问题,例如:

select a.*
from table1 a
inner join table2 b on xx=xx
inner join table3 c on xx=xx
and c.xx=(select b.xx from b where b.xx=?)
where
a.xx=? and b.xx=?
order by a.xx
limit 5

在这种情况下,当数据量上来的时候,效率会非常低下,下面我们来分析一下影响性能的因素

  1. a表和b表where条件中的字段是否有索引,是否使用了索引,使用索引将会加快查询速度,可以用explain查看
  2. c.xx=(select b.xx from b where b.xx=?)使用了子查询,尽量杜绝没必要的子查询,子查询会解释为外链接,多余的连接表带来额外的开销
  3. 当查询的a表字段非常多时,会对a表这些字段进行排序,然后limit进行查找前n个,抛弃前n个,再找m个进行返回

针对于上面的分析,提出以下解决方案:

  1. 增加查询字段、排序字段的索引或联合索引,增加表连接字段索引
  2. 把多余的子查询去掉,条件放在表的连接上
  3. 新建子查询,避免对过多的字段进行order by和limit,减少I/O开销
select a.*
from table1 a
where a.id in
( select a.id
from table1 a
inner join table2 b on xx=xx
inner join table3 c on xx=xx and xx=xx
where
a.xx=? and b.xx=?
order by a.xx
limit 5)

这样的话会大大提升mysql查询性能

最新文章

  1. JavaScript读书笔记(一)
  2. Windows上模拟Linux环境
  3. ASP.NET MVC 4 Ajax上传文件
  4. 轮子来袭 vJine.Core Orm 之 01_快速体验
  5. (转载)Ant教程
  6. 浅谈Mybatis(三)
  7. Tomcat 用户配置
  8. QT修改默认的滚动条样式
  9. shell打印 菱形
  10. 2017-12-15python全栈9期第二天第五节之while else的用法二当不被break打断时else内容的结果会被打印
  11. tomcat8 manager页面限制IP访问
  12. Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面
  13. 前端性能优化之按需加载(React-router+webpack)
  14. Java并发编程总结5——ThreadPoolExecutor
  15. jenkins 批量修改 去掉勾选Build whenever a SNAPSHOT dependency is built
  16. MySQL只有.frm文件恢复表结构
  17. VC++ 操作Windows快捷方式
  18. loadrunner12-错误 -26366: 找不到 web_reg_find 的“Text=19728.00”
  19. MySQL安装和Navicat安装、破解
  20. [CF489D]Unbearable Controversy of Being

热门文章

  1. 新建maven项目总是需要重新选择maven的配置文件
  2. 【react】实现动态表单中嵌套动态表单
  3. 解决autocomplete=off在Chrome中不起作用的方法
  4. css3 pointer-events(阻止hover、active、onclick等触发事件)
  5. 洛谷 P2882 [USACO07MAR]Face The Right Way G
  6. 一文了解HAProxy主要特性
  7. appium移动端自动化测试环境搭建windows-appium-android
  8. 全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?
  9. java 面向对象(二十八):异常 一
  10. 深度理解SpringIOC,面试你根本不需要慌!