본문 바로가기

DB/SQL 튜닝3

SQL튜닝 Oracle autotrace를 이용하여 실행계획 보기 SQL> SET AUTOTRACE TRACEONLY EXPLAIN SQL> SQL> create index job_deptno_index on emp(job, deptno); Index created. //인덱스를 만들어서 셀렉트시에 밑에 실행계획 SQL> select * from emp 2 where job = 'CLERK' AND deptno = 30; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' 2 1 INDEX (RANGE SCAN) OF 'JOB_DEPTNO_INDEX'.. 2021. 1. 3.
SQL튜닝 Oralce INDEX SCAN-> FULL TABLE SCAN 튜닝 "index만 탄다고 무조건 좋은건 아니다." 를 보여주는 예제 set timing on //실행시간을 본다 alter session set optimizer_mode = rule; //룰베이스로 동작 시킨다 set autotrace on // 실행계획 보기 SELECT course_code, nvl(SUM(decode(year,'1999',deposit_amount)),0) Y1999, nvl(SUM(decode(year,'2000',deposit_amount)),0) Y2000, nvl(SUM(decode(year,'2001',deposit_amount)),0) Y2001, nvl(SUM(decode(year,'2002',deposit_amount)),0) Y2002 FROM EC_APPLY WHER.. 2021. 1. 1.
인덱스 리빌드(index rebuild) 성능개선의 원리!! 인덱스 리빌드의 이유 인덱스 파일은 생성후에 DML 을 만복하다보면 성능이 저하됨. 생성된 인덱스는 트리구조를 가지는데 DML 반복하다보면 트리의 한쪽이 무거워져 전체적인 트리의 깊이가 깊어짐. 첫번째 블럭 : 1 2 3 4 5 두번째 블럭 : 3 4 5 첫번째 블럭에서 3 4 5 를 delete문을 수행하면 논리적으로만 삭제임 다시 쓰면 인덱스에서 3 4 5 자리는 물고 있어서 다음 블럭에 3 4 5를 쓴다. 그래서 더 안 좋다. "인덱스리빌더"를 통해서 물고 있는 부분 회수가 가능하다 인덱스 리빌더 하면 성능이 호전되는 이유는 그것이라고 해요. 인덱스 리빌드의 구분 alter index "owner.index_name" rebuild; 작업이 완료된후 쿼리수행해서 index 가 조회되는.. 2021. 1. 1.