급한 사정으로 과제를 할 시간이 없게 됬습니다. 고수분들의 도움이
급히 필요합니다. 문제풀이 도와주세요
학번 뒷자리는 2637 입니다.
2. 자신의 학번에 따라 테이블과 인덱스를 생성하고 스크립트를
보이시오.
---------------------------------------------------------------------------------------------------
- table scheme : hw04(sorted int, random int, padding
varchar2(650))
- column : (sorted random, padding)의 세 컬럼 생성
sorted INT, -- 순차적인 정수값
random INT, -- 난수
padding varchar(650) -- 패딩
- # of tuples : 자신의 학번 마지막 4자리 수의 튜플을 생성
ex) 1998312338 -> 2338개의 튜플 생성
- index : sorted와 random 두 컬럼에 대해 인덱스 생성, 인덱스 이름은
다음과 같다.
hw04_idx_sorted,
hw04_idx_random
-- 테이블 정보 분석 (이때 CLUSTERING FACTOR등 기본적인 테이블
정보가 계산된다.)
---------------------------------------------------------------------------------------------------
3. 1번에서 생성한 테이블의 정보를 보이고
HW04_IDX_SORTED와 HW04_IDX_RANDOM의 clustering factor가 다른 이유룰
설명하고
clustering factor를 계산하는 방법에 대해 간략히 설명하시오.
(실습자료를 참고하여 같은 형식으로 보이시오.
한줄에 모든 정보가 나타나지 않을 것이다. 이 문제는 수업홈페이지
using SQL*Plus 참고자료를
보면 column format을 변경하는 부분 참고)
---------------------------------------------------------------------------------------------------
format :
TABLE INDEX NUM_ROWS LEAF_BLOCKS DATA_BLOCKS DATA_BLKS/KEY
LEAF_BLKS/KEY C_FACTOR
----- --------------- -------- ----------- -----------
------------- ------------- --------
xxxx xxxxxxx xxxx xxxxx xxxxx xxxx xxxx xxxx
---------------------------------------------------------------------------------------------------
4. 1번에서 생성한 테이블에 대해 아래 쿼리들의 실행계획을
보이시오.
---------------------------------------------------------------------------------------------------
- 쿼리 수행 전 아래 명령어를 꼭 수행한다.
ALTER SESSION SET OPTIMIZER_FEATURES_ENABLE = '9.2.0';
set autot trace
-- query 1
SELECT sorted, random
FROM hw04
WHERE sorted = MOD(자신의 학번, 100);
-- query 2
SELECT sorted, random
FROM hw04
WHERE random = MOD(자신의 학번, 100);
-- query 3
SELECT sorted, random
FROM hw04
WHERE sorted BETWEEN 1 AND MOD (자신의 학번, 1000);
-- query 4
select /*+ index(hw04, hw04_idx_sorted) */ sorted, random
from hw04
where sorted between 1 and mod(자신의 학번,1000);
-- query 5
SELECT sorted, random
FROM hw04
WHERE random BETWEEN 1 AND MOD (자신의 학번, 1000);
-- query 6
SELECT /*+ index(hw04, hw04_idx_random) */ sorted, random
FROM hw04
WHERE random BETWEEN 1 AND MOD (자신의 학번, 1000);
---------------------------------------------------------------------------------------------------
5. 위에서 작성된(4번문제) 쿼리들의 실행계획의 비용을
분석하시오.
---------------------------------------------------------------------------------------------------
- full table scan비용 계산 시 multiblock-read는 10으로 한다.
- 비용 계산시 1-2정도의 비용오차가 발생할 수 있는데 왜 이러한
오차가 나타나는지에 대해 각자의 생각을 나타내시오.
ex)
SELECT sorted, random
FROM hw04
WHERE sorted BETWEEN 1 AND MOD (1998312338, 1000);
338 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=25 Card=338
Bytes=2028)
1 0 TABLE ACCESS (FULL) OF 'HW04' (TABLE) (Cost=25 Card=338
Bytes=2028)
TABLE INDEX NUM_ROWS LEAF_BLOCKS DATA_BLOCKS DATA_BLKS/KEY
LEAF_BLKS/KEY C_FACTOR
----- --------------- -------- ----------- -----------
------------- ------------- --------
HW04 HW04_IDX_SORTED 2,338 5 244 1 1 234
HW04 HW04_IDX_RANDOM 2,338 5 244 1 1 2,325
cost :: 244/10 = 24.4 => 25
|