Oracle 优化:使用“介于”或“>=和=和

Oracle 优化:使用“介于”或“>=和=和,oracle,optimization,between,Oracle,Optimization,Between,让我们以下面的问题为例。使用以下各项之间是否有任何区别: SELECT * FROM foo_table WHERE column BETWEEN n and m 及 看起来很简单,Oracle的文档对此非常清楚: [Between]表示“大于或等于低值,小于或等于高值。” 从语义的角度来看,它们是相同的。但是,SQL是一种声明性语言。所以,您不会期望使用两个语义相同的语句执行相同的执行计划,对吗 我的问题是: 优化器可能会在数值索引上为等于或小于或小于监视不同的代码路径,对吗? 对于数字类

让我们以下面的问题为例。使用以下各项之间是否有任何区别:

SELECT * FROM foo_table 
WHERE column BETWEEN n and m

看起来很简单,Oracle的文档对此非常清楚:

[Between]表示“大于或等于低值,小于或等于高值。”

从语义的角度来看,它们是相同的。但是,SQL是一种声明性语言。所以,您不会期望使用两个语义相同的语句执行相同的执行计划,对吗

我的问题是:

优化器可能会在数值索引上为等于或小于或小于监视不同的代码路径,对吗? 对于数字类型,什么是更好更快的方法?
Oracle的优化器将在之间转换为>=和Oracle的优化器将在之间转换为>=并且您是否尝试使用explain运行它们?你发现了什么?我试过这个,同样的解释计划,同样的成本Oracle Database 10g Release 10.2.0.3.0-64位Production PL/SQL Release 10.2.0.3.0-Production CORE 10.2.0.3.0 Solaris for Solaris生产TNS:Version 10.2.0.3.0-Production NLSRTL Version 10.2.0.3.0-Production你试过搜索关于这个主题的可能的文章吗?或者你试过用解释来运行它们吗?你发现了什么?我试过这个,同样的解释计划,同样的成本Oracle Database 10g Release 10.2.0.3.0-64位Production PL/SQL Release 10.2.0.3.0-Production CORE 10.2.0.3.0 Solaris for Solaris生产TNS:Version 10.2.0.3.0-Production NLSRTL Version 10.2.0.3.0-Production你试过搜索关于这个主题的可能的文章吗?或者,在特定的情况下,它确实会产生不同的影响,尽管-@Shankar-很有趣-行为和问题似乎已经从那篇文章中取消了。发现得很好。在特定的情况下,这确实会产生不同,尽管-@Shankar-有趣-行为和问题似乎都从那篇文章中被取消了。找到了。
SELECT * FROM foo_table 
WHER column>=n and column<=m?
explain plan for
select * from dual where dummy between 'W' and 'Y';

select * from table(dbms_xplan.display);

--------------------------------------------------------------------------       
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |       
--------------------------------------------------------------------------       
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |       
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |       
--------------------------------------------------------------------------       

Predicate Information (identified by operation id):                              
---------------------------------------------------                              

   1 - filter("DUMMY">='W' AND "DUMMY"<='Y')