Case:MySQL使用left join的时候or改写成union可以提高效率
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,(1)优化前:使用or的时候,SQL执行时间1.47smysql> select e.emp_no,e.first_name,d.dept_no,d.from_date,d.to_date from
千家信息网最后更新 2025年02月02日Case:MySQL使用left join的时候or改写成union可以提高效率
(1)优化前:使用or的时候,SQL执行时间1.47s
mysql> 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.23s
mysql> 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)
时候
时间
相同
只需
结果
效率
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全大赛在电脑怎么开启
前置服务器名词解释
jpa关联非数据库对象
高青hr软件开发公司
关于网络安全演讲稿六百字
最好用的数据库排名oracle
数据库表的字段指什么
网络安全手抄报写什么内容 简单
北京朗智软件开发
存储服务器作用
腾讯云如何安装服务器
网络安全对于反恐怖主义的意义
土建钢筋算量软件开发
浪潮服务器可以插几个硬盘
网络技术手机题库
服务器叫什么
数据库是否被监控
10大软件开发公司
安卓软件开发页面设计
数据库调用图片
云南网络技术开发报价
魔兽怀旧服服务器怎么买
网络安全防范现状是什么
农业计算机网络技术有限公司
海拔互联网科技
数据库技术是什么领域
网络安全手抄报写什么内容 简单
剑网三怀旧服服务器推荐
维斯易连打印服务器固件
h3c服务器网络接口怎么启用