2013-04-19 3 views
1

"동일하지"보다 더 빨리 :오라클 "평등"나는 간단한 질문이

select a1, a2, sum(b1) 
from myTable 
where a1 ='bla' and a2='blabla' and a3 ='aaa' 

빨리 다음

select a1, a2, sum(b1) 
from myTable 
where a1 ='bla' and a2='blabla' and a3!='bbb' 

내가 이해할 수 있습니다 :

누군가가 쿼리가 말해 줬어 어떤 경우에는 일반적으로 a =가 a! =보다 빠릅니다. 하지만이 경우에는 SUM (b1)이 있습니다. 이것을 위해 나는 모든 myTable을 읽어야한다.

감사합니다. 감사합니다.

+3

"누군가"가 벤치 마크를 제공 했습니까? – Passerby

+1

왜 모든 myTable을 읽어야합니까? 'where' 절이 필터링되므로'b1'에 대한 모든 값을 합산하지 않고'a3'에 두 개의 값만있는 경우가 아니라면 결과가 달라집니다. (전체 표 스캔을 얻는 것은 별도의 질문입니다.) –

+0

사실 그것은 쿼리 논리와 데이터베이스 구조에 달려 있습니다. 예를 들어, 등호 연산자가 문자열과 직접 일치하고 시간이 같지 않아서 같지 않은 문자열을 검색하지 않기 때문에 Equal이 빠릅니다. – Niks

답변

3

누군가가 꽤 옳습니다.

두 개의 쿼리가 테이블에서 정확히 같은 행을 투영하는 경우에도 "1"은 한 번, "2"는 나머지를 구성하는 열에 대해 술어를 사용하는 쿼리가 더 자주 발생합니다 당신은 equals와 더 나을 것 스큐를 식별하는 막대 그래프가있을 경우에도

column != '2' 

: 그것은 함께보다

column = '1' 

:와 인덱스를 사용합니다.

http://sqlfiddle.com/#!4/070db/3

관련 문제