这需要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);
答案 0 :(得分:3)
数据库将为两个查询生成不同的执行计划。如果没有实际的性能问题,我会选择更简单的查询。用or
替换union
会使一个简单的查询变得相当复杂。但这会使复杂的查询难以理解。
两个查询之间也存在细微差别。数据库将过滤掉第二个查询的重复项(您使用的是union
,而不是union all
。)如果您对未选择的列进行过滤,则会产生令人惊讶的效果。
答案 1 :(得分:0)
是的,在这种情况下它是一样的。
答案 2 :(得分:0)
两者在您的示例中都相同
但是第二种方法会更快,因为UNION会对可能很慢的结果集进行排序
答案 3 :(得分:-1)
如果您的vend_id为1001且价格低于5,则不完全相同,那么您将从第一个查询获得两行,而第二个查询中只有一行。
一般来说,第二种形式更好,因为它更容易阅读,可能更快执行。