연습문제

h4. 문제 1. 다음 설명 중 틀린 것은?
1) Oracle에서 인덱스 구성 칼럼이 모두 null인 레코드는 인덱스에 저장하지 않는다.
2) Oracle에서 인덱스 구성 칼럼 중 하나라도 null이 아닌 레코드는 인덱스에 저장한다.
3) SQL Server는 인덱스 구성 칼럼이 모두 null인 레코드도 인덱스에 저장한다.
4) SQL Server는 null 값을 인덱스 맨 뒤에 저장한다.
h4. 문제 2. 다음 중 인덱스 클러스터링 팩터(Clustering Factor)를 잘못 설명한 것은?
1) 데이터가 모여 있는 정도를 말한다.
2) 인덱스를 Rebuild 하면 클러스터링 팩터가 좋아진다.
3) 인덱스 클러스터링 팩터가 좋을수록 물리적인 I/O가 적게 발생한다.
4) 인덱스 클러스터링 팩터가 좋을수록 논리적인 I/O가 적게 발생한다.
h4. 문제 3. 100명의 영업사원이 있고, 각 사원의 1년치 영업실적은 평균 10만 건에 달한다. 이런 상황에서 가장 수행 빈도가 높은 아래 쿼리를 최적화해 달라는 요청을 받았다. 가장 좋은 방안은?
{code}
select substring(일자, 1, 6) 월도
, sum(판매금액) 총판매금액
, avg(판매금액) 평균판매금액
, max(판매금액) 최대판매금액
, min(판매금액) 최소판매금액
from 영업실적
where 사번 = 'S1234'
and 일자 between '20090101' and '20091231'
group by substring(일자, 1, 6)
{code}
1) [사번 + 일자]로 구성된 인덱스를 생성한다.
2) Oracle 이라면 [사번 + 일자] 기준으로 IOT 를 구성하고, SQL Server 라면 클러스터형 인덱스를 생성한다.
3) Oracle 이라면 클러스터를 생성하고, 클러스터에 테이블을 할당한다. 같은 사번끼리 데이터가 모이도록 사번을 클러스터 키(Key)는 선정한다.
4) 테이블을 일자 칼럼 기준으로 Range 파티셔닝하고, Full Table Scan으로 처리한다.
h4. 문제 4. 다음 중 인덱스 튜닝에 대해 잘못 설명하고 있는 것은?
1) 인덱스 튜닝의 핵심요소 중 하나는 불필요한 테이블 Random 액세스가 발생하지 않도록 하는 데에 있다. 이를 위해 인덱스 칼럼 순서를 바꿔주는것도 큰 효과가 있다.
2) 인덱스를 경유한 테이블 액세스 횟수가 같더라도 인덱스 구성에 따라 스캔 효율이 달라진다. 따라서 인덱스 스캔 효율을 높이기 위해 인덱스 칼럼 순서를 바꿔야 할 때가 종종 있다.
3) 조건절이 아래와 같을 때 인덱스를 [deptno + ename] 순으로 구성하나 [ename + deptno] 순으로 구성하나 인덱스 스캔 효율에 차이가 없다. << where deptno = 10 and ename = 'SCOTT' >>
4) 인덱스를 경유한 테이블 Random 액세스 부하가 심할 때, 클러스터 테이블이나 IOT를 활용하는 방안을 고려할 수 있다.
h4. 문제 5. 조인에 대한 설명 중 올바른 것은?
1) 소량의 데이터를 조인할 때는 NL Join, 중간 규모의 데이터를 조인할 때는 Hash Join, 대량의 데이터를 조인할 때는 Sort Merge Join 이 효과적이다.
2) 인덱스 스캔 상 비효율이 발생하지 않도록 인덱스를 최적으로 구성해 주기만 하면, 대용량 데이터 처리에도 NL Join 이 효과적이다.
3) Hash Join은 빠른 Hashing 알고리즘을 사용하기 때문에 최상의 속도를 보장한다. 뿐만 아니라 오브젝트를 영구적으로 저장하지 않기 때문에 저장 효율을 높이는 데도 도움이 된다. 따라서 DW, OLTP를 불문하고 적극적으로 활용하는 것이 좋다.
4) OLTP 시스템에서 조인을 튜닝할 때는 일차적으로 NL 조인부터 고려하는 것이 올바른 순서다.
h4. 문제 6. SQL 트레이스를 수집한 결과 Row Source Operation이 다음과 같았다. 가장 우선적으로 검토할 사항으로 올바른 것은? 단, 한 달간 주문 건수는 평균 50만 건이다.
{code}
select c.고객명, c.연령, c.전화번호, o.주문일자, o.주문총금액, o.배송지주소
from 고객 c, 주문 o
where o.고객번호 = c.주문번호
and o.고객등급 = 'A'
and c.연령 between 51 and 60
and o.주문일자 between '20101201' and '20101231'

Rows Row Source Operation


-








10 NESTED LOOPS
23 TABLE ACCESS BY INDEX ROWID 고객
2978 INDEX RANGE SCAN 고객_IDX
10 TABLE ACCESS BY INDEX ROWID 주문
28 INDEX RANGE SCAN 주문_IDX


1) 고객_IDX 인덱스 칼럼 순서를 조정한다.
2) 고객_IDX 인덱스에 칼럼을 추가한다.
3) 주문_IDX 인덱스 칼럼 순서를 조정한다.
4) 주문_IDX 인덱스에 칼럼을 추가한다.|
{color:white}

문제 1. 4 - 널 값은 SQL Server 는 맨 앞, Oracle 은 맨 뒤 저장
문제 2. 2
문제 3. 2 - 인덱스는 Random 액세스, 클러스터 구성은 원치 않는 일자 액세스, 파티셔닝은 다른 사원 액세스 비효율
문제 4. 1
문제 5. 4
문제 6. 2


{color}