like 검색 질문입니다. 조금 특이한 경우인데요. 0 1 3,754

by 손님 [SQL Query] like [2012.03.13 05:55:23]



만일

a 컬럼의 데이터가
23456
3145
314678
4256789

이런식으로 엄청나게 많습니다.

대략 200만건정도

문제는

입력받는 데이터가


딱 저거와 맞아 떨어져서 where a='3145'
이렇게 되서 찾으면야 인덱스 잘 타고 빨리 나오는데요

그게 아니고

314678900

4156789112

이런식으로 입력을 받는다면

select * from table_name '314678900' like a||'%' ;

이렇게 검색을 했습니다.
문제는 풀 스캔을 하는건데요

저렇게 DB에 데이터가 길이가 여러가지로 들어가있고,

입력받는 데이터에서 DB의 데이터와 앞부분만 맞아도 나오게 하려면

어떻게 해야 되나요?

롱기스트 매치라고 하던가 롱기스턴스 매치라고 하던가 뭐 얼핏 그렇게 들은거 같은데요

초보라 잘 모르겠습니다.

어떻게 해야 인덱스를 잘 태울수 있을까요?



by 마농 [2012.03.13 09:10:35]


이조건을
 WHERE '314678900' LIKE a||'%';
이처럼 바꾸실 수 있는데.
 WHERE a = SUBSTR('314678900', 1, LENGTH(a));
우변에 어차피 a 가 들어가므로 인덱스는 못타겠네요.
LENGTH(a) 대신에 1부터 조건값의 길이만큼 차례대로 숫자를 바꿔가며 조건을 준다면 인덱스가 가능하겠네요.

 WHERE a IN (SELECT SUBSTR('314678900', 1, LEVEL)
   FROM dual
  CONNECT BY LEVEL <= LENGTH('314678900')
)
;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입