[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
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까지
평일주간(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까지
댓글 없음:
댓글 쓰기