mysql union left join_Case:MySQL使用left join的时候or改写成union可以提高效率
(1)優(yōu)化前:使用or的時(shí)候,SQL執(zhí)行時(shí)間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)優(yōu)化后:相同結(jié)果集,使用union的時(shí)候,SQL執(zhí)行時(shí)間只需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)
總結(jié)
以上是生活随笔為你收集整理的mysql union left join_Case:MySQL使用left join的时候or改写成union可以提高效率的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python字符串命名_python-字
- 下一篇: Android10弹出截屏对话框,And