Case:MySQL使用left join的时候or改写成union可以提高效率
admin
2023-04-20 16:04:39
0

(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)


相关内容

热门资讯

今日重磅消息“达人十三水可以开... 网上科普关于“达人十三水有没有挂”话题很是火热,小编也是针对达人十三水作*弊开挂的方法以及开挂对应的...
玩家最新攻略“玄龙炸/金/花究... 家人们!今天小编来为大家解答玄龙炸/金/花透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪...
【第一消息】“新九天牛牛开挂器... 【第一消息】“新九天牛牛开挂器?”(太坑了果然有挂)您好,新九天牛牛这个游戏其实有挂的,确实是有挂的...
【今日要闻】“凑一桌游戏有没有... 有 亲,根据资深记者爆料凑一桌游戏是可以开挂的,确实有挂(咨询软件无需打...
东部战区发布微视频《这么近那么... 你就在我的舷窗下你就在我的舰艏前伸手可掬起日月潭水迈步可登上阿里山顶东部战区发布微视频《这么近那么美...
重磅消息“皇豪互娱牛牛是不是有... 网上科普关于“皇豪互娱牛牛有没有挂”话题很是火热,小编也是针对皇豪互娱牛牛作*弊开挂的方法以及开挂对...
玩家最新攻略“白金岛字牌集有没... 网上科普关于“白金岛字牌集有没有挂”话题很是火热,小编也是针对白金岛字牌集作*弊开挂的方法以及开挂对...
【第一资讯】“宝宝吃吃吃辅助器... 网上科普关于“宝宝吃吃吃有没有挂”话题很是火热,小编也是针对宝宝吃吃吃作*弊开挂的方法以及开挂对应的...
原创 如... 自从智能手机开始有“AI”这个概念以来,“情境感知”就成为了不少机型最明显能够让用户体会到AI“存在...
有色金属“涨”声一片,板块领跑... 近期,全球资本市场有色金属板块表现活跃,多种金属价格同步上涨,板块整体表现强劲。以白银为例,12月2...