2015-01-09 1 views
0

다음 질문을 예로 들어 봅시다.최적화 : "between"또는 "> = 및 <="사용

는 [사이]

는 "보다 크거나 같은 의미

SELECT * FROM foo_table 
WHERE column BETWEEN n and m 

SELECT * FROM foo_table 
WHER column>=n and column<=m? 

간단한 일처럼 보인다는 오라클의 문서가이 죽은 분명하다 : 사용하는 사이에 차이가 있나요 낮은 값이고 높은 값보다 작거나 같습니다. "

의미 론적 관점에서 동일합니다. 그러나 SQL은 선언적 언어입니다. 그래서, 당신은 두 개의 의미 상 동일한 문장으로 동일한 실행 계획을 기대하지 않을 것입니다, 그렇죠?

내 질문은 다음과 같습니다

  • 옵티 마이저은 같거나 대 이하의 숫자 인덱스에 대한보다 오른쪽에 다른 코드 경로를 볼 수 있습니까?
  • 숫자 형식에 대해 더 빠르고 더 좋은 방법은 무엇입니까?
+5

설명과 함께 실행 해 보셨습니까? 뭘 찾았 니? – SMA

+1

동일한 시도, 동일한 비용 계획을 시도했습니다 – Aramillo

+0

Oracle Database 10g 릴리스 10.2.0.3.0 - 64 비트 생산 PL/SQL 릴리스 10.2.0.3.0 - 생산 코어 10.2.0.3.0 생산 Solaris 용 TNS : 버전 10.2.0.3.0 - 생산 NLSRTL 버전 10.2.0.3.0 - 생산 – franvergara66

답변

6

오라클의 최적화는 실행 계획에서 볼 수 >=<=between 변환합니다. 예를 들어,이 11gR2에서입니다 :

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')         

을 주목 filter 사용된다. 따라서 the article this seems to have come from과 같은 가장자리 경우를 제외하고는 사용하는 데 아무런 차이가 없습니다 (Shankar에게 감사). 주류의 경우에 대해 걱정하면 아마 많은 이익을 얻지 못할 것입니다.

+0

특정 경우에는 차이가 있습니다 - http://www.pythian.com/blog/oracle-can-between-and-greater-than-or-equal-to-andless -than-or-equal-to-differences/ – Shankar

+0

@Shankar - 흥미 롭다 - 행동과 그 질문이 그 기사에서 해제 된 것처럼 보인다. 찾았습니다. –