Oracle SQL运算符> =具有比>更高的性能。

时间:2014-10-24 15:29:53

标签: sql database oracle performance

我在面试中被问了一个问题。

下面两个SQL会得到相同的结果。但哪一个有更高的表现?

SELECT * FROM EMP WHERE DEPTNO >= 4

SELECT * FROM EMP WHERE DEPTNO > 3

答案是第一个。 在第一个SQL中,数据库将直接在搜索位置找到DEPT = 4。它具有更高的性能。 在第二个SQL中,Database将定位DEPT = 3,并向前扫描大于3的行。

这是我第一次听说这个理论。我看不出执行计划和统计编号有什么区别。

有没有官方解释呢?

我发现一些中文网站分享了相同的提示。

http://edm.ares.com.tw/dm/newsletter-2014-03-uPKI-OTP-newrelease/it-1.php

2 个答案:

答案 0 :(得分:2)

如果列在该字段上有索引,我发现这是一个神话。我尝试使用主键,两个执行计划都使用索引范围扫描,这在主键或唯一索引上非常快。这两个查询的性能非常接近,两者都返回相似的成本,但是“>”的成本相同估计的CPU成本比“> =”好0.3%。我说BUSTED!

此外,当我说某些内容表现更好时,通常我的意思是10%+即使不是更多。

答案 1 :(得分:0)

我不是100%肯定,但是如果您创建了一个具有大PCTFREE的索引,并且您能够强制在一个叶块中具有值3,而值4则在另一个叶块中。 (这可以通过ALTER DATABASE DUMP BLOCK验证)。如果你强迫Oracle使用索引范围扫描。

然后,您可以从跟踪中看到一个查询处理的页面多于另一个查询页面。