2010-04-22 6 views
7

이 두 문장은 논리적으로 동일합니다BETWEEN 연산자 대> = AND <= : 성능 차이가 있습니까?

SELECT * FROM table WHERE someColumn BETWEEN 1 AND 100 

SELECT * FROM table WHERE someColumn >= 1 AND someColumn <= 100 

다른 대 하나에 잠재적 인 성능 이점이 있습니까?

+1

나는 연산자 사이에 존재한다는 사실조차 알지 못했습니다. 그것을 처음부터 보았을 때 포괄적이거나 배타적 인 경우라면 100 % 명확하지 않았습니다. 나는 옳은 것 같았지만 그 이후로는 성능 차이가 없다고 대답했다. 나는 두 번째 버전을 더 명확하게하기 위해 막대기를 사용했다. 그러나 나는 누군가 다른 사람이 나의 코드를 읽을 때 오해가 없음을 확신하기 위해 괄호를 추가 할 사람의 유형이다. – drs9222

답변

4

효과가 없으며 구문 설탕이 아닙니다.

BETWEEN 버전을 사용하면 함수 재평가를 피할 수있는 경우가 있습니다.

1

아니요, 성능 상실. 그것의 작은 사탕. 당신이

DECLARE @Table TABLE(
     ID INT 
) 

SELECT * 
FROM @Table 
WHERE ID >= 1 AND ID <= 100 

SELECT * 
FROM @Table 
WHERE ID BETWEEN 1 AND 100 

처럼 뭔가를 쿼리 비교를 확인하고 실행 계획을 확인한다면

, 당신은 정확히 같은 것을 알 수 있습니다.

1

성능상의 이점이 없으므로 첫 번째 읽기/쓰기가 쉬워집니다.

1

흠, 놀라운 결과입니다. 여기에 SQL Server가 없으므로 Postgres에서이 작업을 시도했습니다. 분명히 포기가 적용됩니다 : 이것은 반드시 같은 결과를주지 않을 것입니다, 당신의 마일리지는 다를 수 있습니다, 사용하기 전에 의사와 상담하십시오.

select * 
from foo 
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B' 

및 놀랍게도 나에게

select * 
from foo 
where (select code from bar where bar.barid=foo.barid)>='A' 
and (select code from bar where bar.barid=foo.barid)<='B' 

, 모두 거의 동일한 런타임을했다 :하지만 여전히 ...

난 그냥 두 가지 방법으로 간단한 쿼리를 썼다. 나는 EXPLAIN PLAN을했을 때 동일한 결과를 얻었다. 특히, 첫 번째 쿼리는 두 번째 쿼리와 마찬가지로> = 테스트의 경우 한 번, < = 테스트의 경우 다시 두 번 바에 대한 조회를 수행했습니다.

결론 : Postgres에서 최소한 BETWEEN은 실제로 구문상의 설탕입니다.

개인적으로 나는 정기적으로 사용합니다. 특히 판독 값이 표현식 인 경우 판독기가 더 명확하기 때문입니다. 두 개의 복잡한 표현식이 동일하다는 것을 알아내는 것이 중요하지 않을 수 있습니다. 두 개의 복잡한 표현식이 같지 않아도 동일하지 않아야한다고 결론지었습니다.

관련 문제