2014년 3월 5일 수요일

[COUNT,SQL튜닝]구체화뷰를 이용한 count(*) 함수 튜닝, oracle mview를 이용한 count튜닝 myemp1 테이블은 현재 데이터가 2000만건쯤 있고 ...구로디지털단지

[COUNT,SQL튜닝]구체화뷰를 이용한 count(*) 함수 튜닝, oracle mview를 이용한 count튜닝, 구로디지털단지, 가산디지털단지

myemp1 테이블은 현재 데이터가 2000만건쯤 있고 empno 컬럼은 primary key이다.
실습데이터는 다음 URL을 참조하여 만드세요

http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecHINT&wr_id=117

오라클11g의 경우 아래와 같은  SQL문 실행시 index fast full scan을 하도록 되어 있다.
약 8초쯤 걸렸다.(힌트를 안써도 인덱스 패스트 풀 스캔한다.)

SQL> select /*+ index_ffs(e SYS_C0011122) */ count(empno) from myemp1 e

SQL> select  count(empno) from myemp1 e


이번에는 mview를 이용하여 count(*) 튜닝을 해보자. 물론 원본데이터가 변경 되더라도 즉시 mview에 반영이 되어 count가 증가되어야 한다.

1. drop MATERIALIZED VIEW LOG ON myemp1;(이미 있다면)
  CREATE MATERIALIZED VIEW LOG ON myemp1  WITH PRIMARY KEY, ROWID
  INCLUDING NEW VALUES;
 

2. CREATE MATERIALIZED VIEW m_count
    BUILD IMMEDIATE  -- MView 생성과 동시에 데이터들도 생성
    REFRESH FAST      -- 원본의변경된 데이터만 mview에 갱신
    ON COMMIT        -- Commit 이 일어날 때 뷰 Refresh
    ENABLE QUERY REWRITE     
    AS
    select count(*) cnt from myemp1


count를 해보자 0초 걸린다. mview가 사용됨을 실행계획을 통해 알 수 있다.

SQL> select count(*) from myemp1;

  COUNT(*)
----------
  20000000

경  과: 00:00:00.00

Execution Plan
----------------------------------------------------------
| Id  | Operation                    | Name    | Rows  | Bytes | Cost (%CPU)| Ti
me    |
--------------------------------------------------------------------------------
--------
|  0 | SELECT STATEMENT            |        |    1 |    13 |    3  (0)| 00
:00:01 |
|  1 |  MAT_VIEW REWRITE ACCESS FULL| M_COUNT |    1 |    13 |    3  (0)| 00
:00:01 |



이번에는 myemp table에 데이터를 한건 입력하고 mview에 실시간으로 반영되는지 확인하자.


SQL> insert into myemp1 (empno, ename) values (22222222, '222길동');

1 개의 행이 만들어졌습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL>  select count(*) from myemp1;

  COUNT(*)
----------
  20000001 
오라클자바커뮤니티에서 운영, 개발자 전문교육, 개인80%환급 오엔제이프로그래밍실무교육센터(www.onjprogramming.co.kr)

평일주간(9:30~18:30) 개강
(3/10)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(3/10)[기업100%환급]SQL기초에서 Schema Object까지
(3/10)C#4.0,ADO.NET,Network 프로그래밍
(3/11)[채용예정자]오라클자바개발잘하는신입뽑기2개월
(3/17)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(3/24)[기업100%환급][기업100%환급]PL/SQL,ORACLE HINT,TUNING
평일야간(19:00~22:00) 개강
(3/04)C#,ASP.NET마스터
(3/07)안드로이드개발자과정
(3/10)SQL초보에서실전전문가까지
(3/11)웹퍼블리싱 마스터
(3/11)iPhone 하이브리드 앱 개발 실무과정
(3/13)Spring3.X, MyBatis, Hibernate실무과정
(3/14)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~18:00) 개강
(3/08)안드로이드개발자과정
(3/08)JAVA&WEB프레임워크실무과정
(3/09)C#,ASP.NET마스터
(3/15)웹퍼블리싱 마스터
(3/15)Spring3.X, MyBatis, Hibernate실무과정
(3/15)닷넷실무자를위한WPF개발자과정
(3/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(3/29)SQL초보에서실전전문가까지

주말저녁(18:30~22:20) 개강
(3/08)자바기초에서JSP,Servlet,Ajax,jQUERY,스프링,마이바티스,하이버네이트
(3/15)SQL기초에서 Schema Object까지


댓글 없음:

댓글 쓰기