Script. 테스트 데이터 생성용
< ROWNUM_T2 >
■ 생성 요건
- 테이블의 전체 건수는 900,000 ROWS
- C1은 값의 종류가 100,000가지.
- C2는 값의 종류가 26가지.
■ 테이블 생성
drop table rownum_t2 purge;
create table rownum_t2
as
SELECT LEVEL AS C1, CHR(65+MOD(LEVEL,26)) AS C2, level+99999 as c3
FROM DUAL
CONNECT BY LEVEL <= 100000 ;
■ 추가 데이터 입력
begin
for i in 1..8 loop
insert into rownum_t2 select * from rownum_t2;
commit;
end loop;
end;
/
■ 각 칼럼에 인덱스 생성 및 통계정보 수집
CREATE INDEX IDX_01 ON ROWNUM_T2(C2);
CREATE INDEX IDX_02 ON ROWNUM_T2(C2,c3);
BEGIN
dbms_stats.gather_table_stats(OWNNAME=>'SCOTT',
TABNAME=>'ROWNUM_T2',
ESTIMATE_PERCENT=>99,
METHOD_OPT=>'FOR ALL INDEXED COLUMNS',
GRANULARITY=>'ALL',
CASCADE=>TRUE,
NO_INVALIDATE=>FALSE) ;
END;
/
--[조건이 없는 경우]
SELECT *
FROM ROWNUM_T2
WHERE ROWNUM <= 1;
--[인덱스 구성 컬럼만 존재하는 경우]
SELECT *
FROM ROWNUM_T2
WHERE c2 in ('P','S','H')
and ROWNUM <= 1;
SELECT /*+ INDEX_DESC(ROWNUM_T2 INDEX IDX_01) */ *
FROM ROWNUM_T2
WHERE c2 in ('P','S','H')
AND C1 = 1004
and ROWNUM <= 1;
CREATE INDEX IDX_02 ON ROWNUM_T2(C2,c1);
SELECT /*+ INDEX_DESC(ROWNUM_T2 INDEX IDX_02) */ *
FROM ROWNUM_T2
WHERE c2 in ('P','S','H')
AND C1 = 1004
and ROWNUM <= 1;