Case:MySQL使用left join的时候or改写成union可以提高效率

发布时间:2020-07-29 02:29:13

来源:51CTO

阅读:1501

作者:Darren_Chen

(1)优化前:使用or的时候,SQL执行时间1.47smysql> select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where e.emp_no=32000 or d.from_date='1996-11-24';

58 rows in set (1.47 sec)

mysql> desc select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where e.emp_no=32000 or d.from_date='1996-11-24';

+----+-------------+-------+------------+------+----------------+---------+---------+--------------------+--------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys  | key     | key_len | ref                | rows   | filtered | Extra       |

+----+-------------+-------+------------+------+----------------+---------+---------+--------------------+--------+----------+-------------+

|  1 | SIMPLE      | e     | NULL       | ALL  | PRIMARY        | NULL    | NULL    | NULL               | 299335 |   100.00 | NULL        |

|  1 | SIMPLE      | d     | NULL       | ref  | PRIMARY,emp_no | PRIMARY | 4       | employees.e.emp_no |      1 |   100.00 | Using where |

+----+-------------+-------+------------+------+----------------+---------+---------+--------------------+--------+----------+-------------+

2 rows in set, 1 warning (0.00 sec)

(2)优化后:相同结果集,使用union的时候,SQL执行时间只需0.23smysql> select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where e.emp_no=32000

->  union

-> select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where d.from_date='1996-11-24';

58 rows in set (0.23 sec)

mysql> desc select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where e.emp_no=32000 union  select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from employees e left join dept_emp d on e.emp_no=d.emp_no where d.from_date='1996-11-24';

+----+--------------+------------+------------+--------+----------------+---------+---------+--------------------+--------+----------+-----------------+

| id | select_type  | table      | partitions | type   | possible_keys  | key     | key_len | ref                | rows   | filtered | Extra           |

+----+--------------+------------+------------+--------+----------------+---------+---------+--------------------+--------+----------+-----------------+

|  1 | PRIMARY      | e          | NULL       | const  | PRIMARY        | PRIMARY | 4       | const              |      1 |   100.00 | NULL            |

|  1 | PRIMARY      | d          | NULL       | ref    | PRIMARY,emp_no | PRIMARY | 4       | const              |      1 |   100.00 | NULL            |

|  2 | UNION        | d          | NULL       | ALL    | PRIMARY,emp_no | NULL    | NULL    | NULL               | 331143 |    10.00 | Using where     |

|  2 | UNION        | e          | NULL       | eq_ref | PRIMARY        | PRIMARY | 4       | employees.d.emp_no |      1 |   100.00 | NULL            |

| NULL | UNION RESULT |  | NULL       | ALL    | NULL           | NULL    | NULL    | NULL               |   NULL |     NULL | Using temporary |

+----+--------------+------------+------------+--------+----------------+---------+---------+--------------------+--------+----------+-----------------+

5 rows in set, 1 warning (0.00 sec)

mysql left join和or_Case:MySQL使用left join的时候or改写成union可以提高效率相关推荐

  1. mysql union left join_Case:MySQL使用left join的时候or改写成union可以提高效率

    (1)优化前:使用or的时候,SQL执行时间1.47smysql> select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date fr ...

  2. mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...

    先看两张表: 1. user表: 2. animal表: 现在我想要查询各省市区对应的人名和动物名,即根据省市区来连接两张表. 考虑到user表中有的省市区可能在animal表中没有,animal表中 ...

  3. mysql join order by_MySQL 14 慢查询优化join、order by、group by

    1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的 高并发低消耗的比低并发高消耗影响更大 优化示例 并发形式 优化前 假设优化后 高并发低消耗 每小时10000次,每次20个IO ...

  4. left join 一对多_MYSQL 连接查询算法:JOIN语句在 MYSQL 内部到底是怎么执行的

    前言 我们从一个问题引入今天的主题. 在日常业务开发中,我们可能经常听到 DBA 对我们说"不要"(注意:不是禁止)使用 join,那么为什么 DBA 对 join 这么抵触呢?是 ...

  5. mysql默认join是什么类型_MySQL:join语句类型

    MySQL:join语句类型 join从句的类型有以下几种: 内链接(inner) 右外连接(right outer) 左外连接(left outer) 全外连接(full outer) 交叉链接(c ...

  6. mysql中的联结_MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内 ...

  7. mysql+join的原理,Mysql连接join查询原理知识点

    Mysql连接join查询原理知识点 Mysql连接(join)查询 1.基本概念 将两个表的每一行,以"两两横向对接"的方式,所得到的所有行的结果. 假设: 表A有n1行,m1列 ...

  8. mysql的exists与inner join 和 not exists与 left join 性能差别惊人

    由于客户数据量越来越大,在实践中让我发现mysql的exists与inner join 和 not exists与 left join 性能差别惊人. 我们一般在做数据插入时,想插入不重复的数据,或者 ...

  9. mysql join 替代办法_mysql-如何使用JOIN代替子查询(NOT IN)

    我想列出$_SESSION ['userid']跟随但不跟随的所有人员 以下查询适用于以下演员,它可以正常工作 IN(慢) SELECT user.* FROM user WHERE user.use ...

最新文章

  1. 求字符串中汉字的个数
  2. vonic 安装的坑
  3. PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )
  4. 四种为HttpClient添加默认请求报头的解决方案
  5. 获取字段 命名空间和类_系统架构之命名规范
  6. Quick Emacs
  7. Java 如何查询硬盘所有文件
  8. 洛谷P3749 [六省联考2017]寿司餐厅
  9. Android的动画简单学习
  10. Linux下Docker命令自动补全
  11. 解决由于破解软件导致的page fault in nonpaged area蓝屏
  12. ImportError: /usr/local/lib/python3.7/dist-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: unde
  13. Windows通过虚拟机的Ubuntu系统安装、配置、管理、远程访问ClickHouse
  14. VMware vSphere 介绍、安装 服务器虚拟化部署完整配置
  15. 小米官宣:手表Color 2来了,6色多彩表带,你喜欢哪个?
  16. SONiC+P4实践——P4Runtime下发ACL表项
  17. 升级bigsur_升级macOS Big Sur遇到问题?问题修复合集不可错过
  18. Flutter典型错误:There are multiple heroes that share the same tag within a subtree.
  19. 视频教程-VR局域网对战【捕鱼猎手】实战视频教程(上)-Unity3D
  20. python英雄联盟登录程序,注册用户程序

热门文章

  1. canvas中window坐标转换为canvas坐标
  2. 怎么在百度里通过关键词搜索到自己的网站
  3. php 把图片转换成二进制流,php把图片转换成二进制流的方法
  4. 迷你世界远古机器人_以我的世界生物为原型 打造17款创意庇护所
  5. php ajax ip,php / ajax REMOTE_ADDR设置为伪网络适配器的IP
  6. python程序开机自启动_Linux下Python脚本自启动和定时启动的详细步骤
  7. 深入java虚拟机需要读吗_《深入理解Java虚拟机》读后总结(一)JVM内存模型
  8. eclipse java import_java – Eclipse:将源代码的import文件夹导入...
  9. 优秀案例|想学排版?布局清晰明了的海报给你参考
  10. 传统的世界的中国风吉祥纹样海报这样设计。