간단한 쿼리를 통해 실행 계획을 살펴보자.
>> Toad에서 실행계획 보는법 Ctrl + E
LIKE '%' 구분의 실행계획 확인
SELECT * FROM BOOK_CODE WHERE BOOKNAME LIKE '%코딩%'
Like 문으로 쿼리를 하면 INDEX를 타지 않고 테이블을 통으로 찾아서 읽고있다. =>Table Access Full
그렇다면 BOOKNAME 컬럼에 강제로 INDEX를 태워보자.
CREATE INDEX BOOK_CODE_BKNAME ON BOOK_CODE(BOOKNAME);
SELECT /*+ INDEX(a BOOK_CODE_BKNAME)*/ A.* FROM BOOK_CODE A WHERE BOOKNAME LIKE '%코딩%';
Cost 가 대폭 증가해버렸다..
Like 문 빠르게 하는 방법
SELECT COMP_NAME,STATUS,VERSION FROM DBA_REGISTRY WHERE COMP_NAME='Oracle Text'--확인
CREATE INDEX BOOK_CODE_TX ON BOOK_CODE(BOOKNAME) INDEXTYPE IS CTXSYS.CONTEXT;
SELECT * FROM BOOK_CODE WHERE CONTAINS(BOOKNAME, '%코딩%') > 0;
Cost를 대폭 감소 시킬 수 있다.
>> Like문을 자주 사용 할 텐데 INDEX를 타지 않거나 통으로 스캔을 하게된다.
이 때 내부적으로 키워드 딕셔너리를 구성하는 Oracle Text 기능을 사용하자.
>> 실제로 제품코드는 VARCHAR 형식의 숫자로 구성되어있는데,
숫자로된 데이터는 탐색되지않는다.
Oracle Database 11g Release 11.2.0.4.0 - 64bit Production 확인
Cost : 작업에 필요한 예측비용
Bytes : Access된 bytes 수
Cardinality : Access된 row 수
>> 낮을수록 성능이 대체로 좋다.
'데이터베이스 > SQL튜닝 PL-SQL' 카테고리의 다른 글
[SQL튜닝] merge no_merge (0) | 2022.07.12 |
---|