오라클 SQL튜닝, WHERE절에서 SQL함수 사용튜닝, 함수기반인덱스, 오라클교육동영상, 오라클학원
페이지 정보
작성자 오라클자바커뮤니티 작성일21-12-10 00:00 조회11회 댓글0건관련링크
본문
오라클 SQL튜닝, WHERE절에서 SQL함수 사용튜닝, 함수기반인덱스, 오라클교육동영상, 오라클학원
강의자료 : http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun\u0026wr_id=159
WHERE절의 컬럼에 SQL함수를 사용하는 것은 부담스러운 일 입니다. 특히 인덱스가 걸려 있는 컬럼인데 SQL 함수가 사용되었다면 그 인덱스는 사용할 수가 없어 원본 데이터인 전체 테이블 FULL SCAN을 하므로 성능이 저하 됩니다.
WHERE절에서는 좌측 컬럼에 대해서는 함수 사용을 피하고 오른쪽 (문자)상수쪽에 SQL함수를 사용해야 인덱스를 사용하는데 문제가 없으며, 부득이 사용해야 한다면 함수기반 인덱스를 사용해야 합니다.
다음과 같은 예를 보겠습니다.
-- MYEMP1 테이블은 2000만건 정도 있는 테이블 입니다.
SELECT COUNT(*) FROM MYEMP1;
SELECT * FROM MYEMP1;
-- MYEMP1 테이블에 생성되어 있는 인덱스를 확인 합니다.
SELECT TABLE_NAME, INDEX_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'MYEMP1';
-- ename 컬럼은 인덱스가 생성되어 있어서 빨리 조회됩니다.
SELECT * FROM MYEMP1
WHERE ENAME = '가길동281';
-- like인 경우도 인덱스 컬럼인 ename에 변현이 안되었으므로
-- 인덱스를 경유하여 빨리 조회 됩니다.
SELECT COUNT(*) FROM MYEMP1
WHERE ENAME LIKE '다길동%';
-- 인덱스 컬럼인 ename에 변형이 생겨 인덱스를 이용할수 없습니다.
-- 시간이 더 걸립니다.
SELECT COUNT(*) FROM MYEMP1
WHERE SUBSTR(ENAME, 0, 3) = '다길동';
-- 꼭 WHERE절의 컬럼에 대해 SQL함수를 사용해야 한다면
-- 함수기반 인덱스를 만드세요.
DROP INDEX FIDX_MYEMP1_ENAME;
CREATE INDEX FIDX_MYEMP1_ENAME ON MYEMP1( SUBSTR(ENAME, 0, 3) );
-- 함수가반 인덱스를 생성 후 실행하니 빨리 조회 됩니다.
SELECT COUNT(*) FROM MYEMP1
WHERE SUBSTR(ENAME, 0, 3) = '다길동';
댓글목록
등록된 댓글이 없습니다.