like 검색 문의 드립니다. 0 5 2,203

by DJ메탈짱™ [PL/SQL] LIKE검색 [2009.12.21 09:13:17]


안녕하세요.

where 조건을 추가하는데 있어서 실행 속도가 너무 안나와 이렇게 문의 드립니다.

예를들어 쿼리는 아래와 같습니다.

select count(*) from 테이블
where 컬럼1 is not null
and 
(
   컬럼2 like '1111%' 
   or 컬럼2 like '2222%'
)

컬럼1,2에 인덱스를 걸어줬고, 실행계획을 보면 인덱스를 잘 탑니다.
그런데도 속도가 많이 늦더라구요...

컬럼1만 조건에 걸면 바로바로 select 되는데 컬럼2를 하나만 쓰던 or로 두번 쓰던 속도는 많이 느리네요...
이런경우 해줄수 있는 방법이 없을까요? 서브테이블을 사용한다던가 하는...

조언좀 부탁드립니다. (__)

by 이재현 [2009.12.21 09:32:36]
select count(*) from 테이블
where 컬럼1 is not null
and
(
컬럼2 like '1111%'
union all
컬럼2 like '2222%'
)

by 현 [2009.12.21 11:52:17]
질문이 살짝 애매 하네요.
컬럼1,2에 인덱스가 있다 하셨는데,
복합인덱스로 컬럼1+컬럼2 이렇게 있는 것인가요? 아니면 각각 인덱스가 있는 것인가요?
각각 인덱스가 있는 것이라면 위에 이재현님이 말씀하신대로 하시면 됩니다.

by DJ메탈짱™ [2009.12.21 12:01:05]
두분 감사드립니다!!!!
복합인덱스로 걸어놓은 상태인데.
FULL SCAN은 하지 않아도 속도가 안나와서요...

by 현 [2009.12.21 12:17:16]
아..
복합인덱스라면 뒤의 컬럼2 때문에 늦을 수 있습니다.
컬럼1 and 컬럼2 이렇게 조건이 들어오면 빠르겠지만
컬럼2만 있게 되면 컬럼1에 조건이 없기 때문에 늦게 됩니다.
따라서 컬럼2가 선행되는 인덱스가 하나더 필요합니다.

by finecomp [2009.12.21 14:51:17]
먼저...;
그렇게 해서 나온 카운트는 얼마나 되던가요?
이것이 하루 평균 몇번정도 수행되는 쿼리인가요?
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입