mysql left join和or_Case:MySQL使用left join的时候or改写成union可以提高效率
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可以提高效率相关推荐
- 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 ...
- mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...
先看两张表: 1. user表: 2. animal表: 现在我想要查询各省市区对应的人名和动物名,即根据省市区来连接两张表. 考虑到user表中有的省市区可能在animal表中没有,animal表中 ...
- mysql join order by_MySQL 14 慢查询优化join、order by、group by
1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的 高并发低消耗的比低并发高消耗影响更大 优化示例 并发形式 优化前 假设优化后 高并发低消耗 每小时10000次,每次20个IO ...
- left join 一对多_MYSQL 连接查询算法:JOIN语句在 MYSQL 内部到底是怎么执行的
前言 我们从一个问题引入今天的主题. 在日常业务开发中,我们可能经常听到 DBA 对我们说"不要"(注意:不是禁止)使用 join,那么为什么 DBA 对 join 这么抵触呢?是 ...
- mysql默认join是什么类型_MySQL:join语句类型
MySQL:join语句类型 join从句的类型有以下几种: 内链接(inner) 右外连接(right outer) 左外连接(left outer) 全外连接(full outer) 交叉链接(c ...
- mysql中的联结_MySQL的联结(Join)语法
MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别: 在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如果内 ...
- mysql+join的原理,Mysql连接join查询原理知识点
Mysql连接join查询原理知识点 Mysql连接(join)查询 1.基本概念 将两个表的每一行,以"两两横向对接"的方式,所得到的所有行的结果. 假设: 表A有n1行,m1列 ...
- mysql的exists与inner join 和 not exists与 left join 性能差别惊人
由于客户数据量越来越大,在实践中让我发现mysql的exists与inner join 和 not exists与 left join 性能差别惊人. 我们一般在做数据插入时,想插入不重复的数据,或者 ...
- mysql join 替代办法_mysql-如何使用JOIN代替子查询(NOT IN)
我想列出$_SESSION ['userid']跟随但不跟随的所有人员 以下查询适用于以下演员,它可以正常工作 IN(慢) SELECT user.* FROM user WHERE user.use ...
最新文章
- 求字符串中汉字的个数
- vonic 安装的坑
- PHP进行图片下载的时候,出现图片损坏,无法打开(实质原因,多输出了一个空白字符ZWNBSP )
- 四种为HttpClient添加默认请求报头的解决方案
- 获取字段 命名空间和类_系统架构之命名规范
- Quick Emacs
- Java 如何查询硬盘所有文件
- 洛谷P3749 [六省联考2017]寿司餐厅
- Android的动画简单学习
- Linux下Docker命令自动补全
- 解决由于破解软件导致的page fault in nonpaged area蓝屏
- ImportError: /usr/local/lib/python3.7/dist-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: unde
- Windows通过虚拟机的Ubuntu系统安装、配置、管理、远程访问ClickHouse
- VMware vSphere 介绍、安装 服务器虚拟化部署完整配置
- 小米官宣:手表Color 2来了,6色多彩表带,你喜欢哪个?
- SONiC+P4实践——P4Runtime下发ACL表项
- 升级bigsur_升级macOS Big Sur遇到问题?问题修复合集不可错过
- Flutter典型错误:There are multiple heroes that share the same tag within a subtree.
- 视频教程-VR局域网对战【捕鱼猎手】实战视频教程(上)-Unity3D
- python英雄联盟登录程序,注册用户程序
热门文章
- canvas中window坐标转换为canvas坐标
- 怎么在百度里通过关键词搜索到自己的网站
- php 把图片转换成二进制流,php把图片转换成二进制流的方法
- 迷你世界远古机器人_以我的世界生物为原型 打造17款创意庇护所
- php ajax ip,php / ajax REMOTE_ADDR设置为伪网络适配器的IP
- python程序开机自启动_Linux下Python脚本自启动和定时启动的详细步骤
- 深入java虚拟机需要读吗_《深入理解Java虚拟机》读后总结(一)JVM内存模型
- eclipse java import_java – Eclipse:将源代码的import文件夹导入...
- 优秀案例|想学排版?布局清晰明了的海报给你参考
- 传统的世界的中国风吉祥纹样海报这样设计。