쿼리문이 제대로 Index를 타는지 확인하는 방법 7 0 6,486

by 안병훈 [2006.01.25 09:46:38]


특정 테이블을 사용하는 많은 sql 문장들이 있고, 이 문장들이 index를 제대로 타고 있는지 아니면 full scan 하는지를 아는 방법.

 

1. 사용 SQL문 조회
  - v$sql, v$sqlarea, v$sqltext ... etc ... 이용

ex)  select *
       from v$sqlarea
       where sql_text like '%table_name%';

2. EXPLAIN PLAN 사용법 예제 (sql script경로는 OS 또는 install 경로에 따라 다름)

ex)

c:> sqlplus "/as sysdba"

sql> @c:/oracle/ora81/sqlplus/admin/plustrce.sql [plustrce.sql script 실행]

sql> grant plustrace,dba to scott; [dba 권한부여]

sql> connect scott/tiger [DB connect]

sql> @c:/oracle/ora81/rdbms/admin/utlxplan.sql [utlxplan.sql script 실행]


SQL> set autotrace traceonly; [autotrace 설정]
-- traceonly: 출력결과 데이터는 배제

SQL> select * from big_emp where deptno = 10; [대상 SQL문 실행]

5001 개의 행이 선택되었습니다.

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (FULL) OF 'BIG_EMP'

Statistics
----------------------------------------------------------
          0  recursive calls
          4  db block gets
        534  consistent gets
          0  physical reads
          0  redo size
     521889  bytes sent via SQL*Net to client
      39830  bytes received via SQL*Net from client
        357  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
       5336  rows processed

SQL> set autotrace off; [autotrace 해제]

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입