我们在使用mysql数据库时,经常会使用到mysql的联合查询,联合查询分为内连接和外连接,内连接查询结果是联合的表都存在匹配才会有结果,外连接则根据驱动表是否存在匹配来生成结果集。

这里使用mysql用例数据库employees举例,联合查询时的一些优化。这里涉及到的表主要是employees和salaries表。

mysql内连接查询时,查询优化器会选择数据量较小的表作为驱动表。employees表大概是30万的数据量,salaries则接近200万。

我们不知道哪些表作为驱动表合适,可以使用join,让mysql优化器帮我们做出选择。

 explain select e.emp_no, s.salary  from employees e join salaries s on e.emp_no  = s.emp_no order by s.salary limit 10;

explain的结果表明mysql使用employees表作为驱动表,结果集一次查询会包含接近30万的数据,由于要根据工资字段进行排序,这里使用到了临时表和文件排序。这是由于mysql的联表查询的执行策略,是循环嵌套查询,即mysql先在一个表中循环取出单条数据,然后再嵌套循环到下一个表中寻找匹配的行,以此类推,直到找到所有表中匹配的行为止。所对被驱动表的字段进行排序时,会产生临时表,并采用文件排序,在数据量很大的时候效率是很慢的。

为了在排序的时候使用上索引,和不使用临时表。我们先对salary字段建立索引。

alter table salaries add index(salary);

接着我们采用left join,使用salaries表作为驱动表。

 explain select e.emp_no, s.salary  from salaries s left join employees e on e.emp_no  = s.emp_no order by s.salary;

  

可以看到查询时使用了索引。结果集也会根据limit分页来决定。

转载于:https://www.cnblogs.com/fishisnow/p/6719439.html

mysql联合查询sql优化相关推荐

  1. 【职坐标】Mysql中查询SQL优化的常用方法(一)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

  2. mysql 多表联查语句优化_?多表联合查询SQL语句优化

    11.27 多表联合查询的优化方式,优化后的SQL及分析 优化方式: 1.尽量不用'*' 2.小表作驱动 3.大表建索引 原本SQL语句: select * from order left join ...

  3. MySQL进阶之SQL优化

    1.使用 show status like 'Com%';可以查到各种语句执行的次数. Com_select:执行select操作的次数. Com_insert:执行insert的次数 Com_upd ...

  4. 记一次百万数据量查询sql 优化

    记一次百万数据量查询sql 优化 问题描述 问题分析过程 总结 简单了解用到的pgsql 的索引结构 pgsql 的with 扩展 对于更大数据量的数据还有没有其他更好的方案 问题描述 数据库用的是p ...

  5. MySQL联合查询语法内联、左联、右联、全联

    MySQL联合查询效率较高,以下例子来说明联合查询(内联.左联.右联.全联)的好处: T1表结构(用户id,用户名,密码)    userid   username  password 1   jac ...

  6. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  7. 开启Mysql慢查询来优化mysql

    开启Mysql慢查询来优化mysql 优化sql语句是优化数据库的一个很重要的方面,那么怎么发现那些耗时耗资源的sql语句呢,开启Mysql慢查询! 1.查看是否开启慢查询,默认情况下是关闭的.你的m ...

  8. 资源放送丨《MySQL的查询与优化》PPT视频

    点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请资深专家 杨明翰 老师分享了<MySQL的查询与优化>,在这里我们将课件PPT和实况录像分享出来,供大家参 ...

  9. 今晚直播丨MySQL的查询与优化

    经典技术分享:MySQL的查询与优化- 03.04 本次分享满满干货,从如何获取慢查询入手,介绍MySQL数据如何存储和访问,以及MySQL基于规则和成本的优化.通过explain分析执行计划,讲解对 ...

最新文章

  1. python中loop函数运用_使用涉及函数的Python在for循环中填充DataFrame
  2. OpenGL ES之深入解析如何实现“手写绘画板”
  3. 计算机辅助设计还需要手绘吗,西安电脑如此发达为什么还要学习手绘
  4. Java 面向对象的设计原则
  5. 大数据时代,如何做好数字化精益生产?附26页智慧工厂解决方案
  6. 三星uboot1.1.6源码分析——start.s(1)
  7. GitHub上Star 量最高的 5 个机器学习项目
  8. arcgis 服务网页打开需要输入用户名和密码问题解决
  9. Android开发笔记(三)屏幕分辨率
  10. 【计算机组成原理】课本总览
  11. 给定一个9位数字的ISBN,求其校验位
  12. 蓝桥杯——说好的进阶之入学考试
  13. 路由交换技术vlan、trunk、单臂路由、三层交换、链路聚合、STP
  14. 欧姆龙NX控制器与Sysmac studio的电机配置方法
  15. 手机便签怎么对待办分类文件夹加密
  16. android 通知写法_Android消息通知-Notifation
  17. Win10下PDF打开方式经常变成系统默认应用
  18. Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)
  19. html5常用的单标签,HTML5的常用的标签
  20. SharePoint Log分析 —— HRESULT: 0x8007007E

热门文章

  1. python 廖雪峰_廖雪峰的Python系列教程(20)——高级特性之生成器
  2. redis如何解决秒杀超卖java_Spring Boot + redis解决商品秒杀库存超卖,看这篇文章就够了...
  3. NPAPI——实现非IE浏览器的类似ActiveX的本地程序(插件)调用
  4. ADO.NET 获取元数据
  5. 智慧赋能黔货出山 丰收节交易会·李喜贵:贵州农业数字化
  6. flask静态html
  7. leecode第一百四十八题(排序链表)
  8. 实习随记-不定时更新
  9. 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
  10. 【皇甫】☀一本好书 你值得浏览