안녕하세요 like 조건절 효율을 올릴 수 있는 방법 문의 드립니다.
col1 -> 회사명으로 가정하였을때
방법 1.
select col1 from t1
where instr(col1, :바인드 ) >0;
-> full table
방법2.
select col1 from t1
where col like :바인드%;
col1에 인덱스를 걸고 방법2처럼 사용하려고 생각했는데 문제가 있었습니다.
예) 한국전력공사
바인드가 한국, 한국전력은 문제가 없으나
사용자가 전력공사로 검색을하였을경오 나오지 않는 문제.
결국 양쪽에 %%를 걸면 full table을 타는 문제가 있음.
방법3
context index를 활용해보려 했지만, 한글에 한계가 있는것으로 보이더라고
select col1 from t1
where contains(col1, :바인드) >0
:바인드에 한국이 들어갔다고 가정하면
where col1 like '한국 %' 의 형태의 결과 값이 나더라고요
한국 띄고 %의 형태
아무리 생각해도 다른방법이 생각나지 않아 문의 드립니다.
고수님들 답변 부탁드려요 ^^
앞 뒤 % 라면 SQL만으로는 특별한 방법은 없습니다.
방법이 있다면? 위에 언급한 full-text 검색이구요. 더 나아가서는 검색엔진을 이용하는 것입니다.
질문하신 FBI 는 입력값이 (컬럼과 상수) 일때만 가능합니다. 여기서는 입력값이 변수이므로 불가능합니다.
위 쿼리를 보면 col1 만 조회하므로 full table 이 아닌 full index 를 탈것 같네요.
full index 를 안타고 full table 탄다면? col1 IS NOT NULL 조건을 추가해 보세요.
일반적으로 LIKE 보다 INSTR 이 가볍다고 알려져 있습니다.