SQL,优化我的查询:UNION vs OR

时间:2013-06-19 08:05:15

标签: sql performance select

我有这样的问题:

SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid = c.id
UNION
SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid = ''
UNION
SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid is null

它完美无缺,但我不喜欢我必须重复几次(3次,由2个工会分开)。

因此我尝试编写这样的查询:

SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE (e.cityid = c.id OR e.cityid = '' OR e.cityid is null)

它也可以完美地运行,但与使用联合的第一个查询相比,它非常慢。

因此可以用另一种方式编写查询,所以我得到了第一个查询的性能而没有多次重复自己。

感谢。

2 个答案:

答案 0 :(得分:2)

这与原始查询具有相同的语义。

SELECT DISTINCT e.firstname,
                e.surname
FROM   employees e
       LEFT JOIN cities c
         ON e.cityid = c.id
WHERE  e.cityid = ''
        OR e.cityid IS NULL
        OR c.id IS NOT NULL 

答案 1 :(得分:1)

SELECT e.firstname, e.surname
FROM employees e left join cities c
on e.cityid = c.id OR e.cityid = '' OR e.cityid is null