안녕하세요
SELECT문을 사용할 때, WHERE절의 조건필드 순서가 SELECT 속도에 어떤 영향을 미치는지 궁금합니다.
예를들어,
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_GLT0
FROM GLT0
WHERE RLDNR = '00'
AND RRCTY IN ('0','2')
AND RYEAR = P_GJAHR
AND RACCT IN GR_RACCT
AND BUKRS = '1000'.
위와 같은 SELECT문이 있을때, WHERE절의 RYEAR와 BUKRS의 위치를 바꾸면 속도가 틀려진다던지
그런거요.
전 지금까지 테이블에 생성되어 있는 인덱스 순서대로 WHERE조건 필드 순서를 지정해줬거든요.
테이블에 생성된 인덱스 순서대로 조건필드 순서를 맞춰주는게 맞는건가요?
만약, 해당 스탠다드 테이블에 인덱스가 없다면 그리고 인덱스 생성을 할수없는 상황이라면,
생성된 인덱스 중 가장 근접한 인덱스의 필드순서대로 작성해주면 될까요?
날씨가 추운데 모두 감기 조심하시구요.
이와 관련된 것을 자세히 알고싶습니다.
조언부탁드립니다. ^^
댓글 4
-
양키
2011.01.13 18:27
-
원니컴
2011.01.13 19:35
제가 알기로 순서는 상관없습니다. 어차피 where 필드는 디비옵티마이저라는 넘이 인덱스를 비교해서 빠른 인덱스랑 연결해 주기 때문입니다.
다만 디비옵티마이저가 복잡한 커리에서는 제 기능을 못하기때문에 hint를 걸어준다던지 아니면 인덱스 필드를 추가해서 튜닝을 하게 되죠.
가장 중요한건 우선 커리를 날려보시고 커리가 어떤 인덱스를 타는지 걸어보십시오. st05에서 한번 제대로 된 인덱스를 타는지 확인해보시고 아니면 원하는 인덱스를 탈수 있도록 튜닝하는게 가장 중요할 것 같습니다.
하지만 코딩 할때 원하는 인덱스 순으로 where 절을 넣어주는 습관을 가지는게 좋을것 같습니다. 추후 비교할때 직관적이기 때문에 수정하기 편합니다. 개발자를 위해서 그런 코딩 습관을 가지는게 좋을것 같네요.
-
육억
2011.01.13 19:52
순서는 상관없고
오라클 옵티마이저가 알아서 판단합니다.
결합인덱스 경우 중간에 조건이 빠지면 거기까지만 걸립니다.
힌트를 주어서 강제 지정할수도 있습니다.
%_HINTS ORACLE 'ORDERED USE_NL (T_01 T_00)'.
이런식으로 주면 되고요...
필요하신데로 결합인덱스 만드시면....
-
아밥맨
2011.01.14 03:32
아 그렇군요
자세한 답변 정말 감사합니다. ^^
st05 테스트 한번 해보시죠 ㅋ