在union和boolean条件之间进行选择

时间:2010-06-09 08:57:21

标签: sql

这需要UNION吗?

SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id IN (1001,1002);

如果你这样做,它是一样的吗?

SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
OR vend_id IN (1001,1002);

4 个答案:

答案 0 :(得分:3)

数据库将为两个查询生成不同的执行计划。如果没有实际的性能问题,我会选择更简单的查询。用or替换union会使一个简单的查询变得相当复杂。但这会使复杂的查询难以理解。

两个查询之间也存在细微差别。数据库将过滤掉第二个查询的重复项(您使用的是union,而不是union all。)如果您对未选择的列进行过滤,则会产生令人惊讶的效果。

答案 1 :(得分:0)

是的,在这种情况下它是一样的。

答案 2 :(得分:0)

两者在您的示例中都相同

但是第二种方法会更快,因为UNION会对可能很慢的结果集进行排序

答案 3 :(得分:-1)

如果您的vend_id为1001且价格低于5,则不完全相同,那么您将从第一个查询获得两行,而第二个查询中只有一行。

一般来说,第二种形式更好,因为它更容易阅读,可能更快执行。