데이터베이스/SQL튜닝 PL-SQL

SQL 튜닝 - 실행계획 및 LIKE CONTAINS

Unipiz 2022. 7. 5. 16:18

간단한 쿼리를 통해 실행 계획을 살펴보자.

>> 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