select 시 where 절의 순서와 관련하여 성능에 영향을 미치는지 궁금합니다.
select *
from table_name
where aaa = 1
and bbb = 2
and ccc = 3
이런식으로 쿼리가 있을 경우 aaa 는 인덱스 컬럼이라고 가정하였을때 aaa, bbb, ccc가 오는 순서에 따라 성능에 영향을 미치나요?
아니면 전혀 상관이 없는지요... 궁금합니다.
mssql db 는 cbo(cost base optimizer) 를 기본 아키텍쳐로 가지고 있습니다.
따라서 where 의 컬럼 순서는 중요하지 않습니다.
의미대로 mssq의 옵티마이져는 where 조건중 가장 적은 비용으로 데이터 set 를 가져 올 수 있는 컬럼을 먼저 선택하게 됩니다. (컬럼의 순서에 관계없이)
물론 where 조건의 컬럼 모두에 index가 걸려 있어도 순서에 관계없이... 가장 비용이 적은 컬럼을 먼저 선정하여 index로 이용하게 됩니다.
//나그네님 Rule Based Optimizer에서는 WHERE절의 순서에 영향을 받고 Cost Based Optimizer에서는 영향을 받지 않는다 라고 해석해도 되겠습니까?
감사합니다 많은 도움 되었습니다.
rule base도 영향을 받지 않습니다.
그렇지만.. rule base 는 where 절의 조건에 따라서 옵티마이져가 어떤 컬럼을 먼저 선택할 것인가를
결정하게 됩니다.
가령.. where col1 = '나그네' and col2 like '나그네%' 이런 두 조건이 있다고 칩시다.
rule base 의 옵티마이져에서는 where 조건이 = 이 % 보다 우선 순위로 여겨서 = 조건의 컬럼을
인덱스로 선택하게 됩니다. 이를 선택의 우선 순위라고 합니다. (rule base에서)
네이버나 구글에서 rule base 에서 인덱스의 우선 순위라고 검색해 보면... rule base에서 where 조건
컬럼의 어떤 조건이 제일 먼저 인덱스 사용에 우선시 되는지 검색이 가능합니다.
아마도 이는 oracle 의 과거 rule base(7,8) 버전에서나 가능한 이야기 겠죠..
덤으로 이런 rule base 에서는 from 절의 테이블 순서도 driving table 선정에도 영향을 주었답니다.
따라서 join 시 driving table 의 순서에 따라서 where 절의 인덱스 컬럼의 순서도 영향을 받았겠죠?
하지만 현재 10g 이상에서는 rule base가 기본적으로 기술 지원되지 않기 때문에.. 대세는 cost base 입니다. 따라서 rule base는 크게 염려하거나 신경쓰지 않으셔도 될거 같습니다.
도움이 되셨기를....