【发布时间】:2011-12-16 17:48:50
【问题描述】:
我有一个包含 3 列 cost、from_date 和 to_date 的表。我必须选择所有没有从月初到月底的日期的行。也就是说,选择没有 from_date 为 '1-NOV-2011' 和 to_date 为 '30-NOV-2011' 的行。我已经写了 2 个查询。
SELECT * FROM TABLE1 WHERE FROM_DATE <> '1-NOV-2011' OR TO_DATE <> '30-NOV-2011';
和
SELECT * FROM TABLE1 MINUS SELECT * FROM TABLE1 WHERE FROM_DATE = '1-NOV-2011' AND TO_DATE = '30-NOV-2011';
哪一个会提供更好的性能?
【问题讨论】:
-
你试过了吗?如果没有,为什么不呢?
-
我试过了。第二个有点快。但我不确定是不是因为服务器负载的不同(很多人都在使用服务器)。
-
第一个查询中的逻辑是错误的:应该是
AND,而不是OR。使用OR将返回不是在 11 月初开始或没有在 11 月底结束的所有行,这不同于(但包括)仅在 11 月期间运行的行。 -
查询计划告诉你什么?