SQLD문제 관련 질문이요 0 4 2,194

by 찐감자 [2016.08.30 00:12:50]


5. 총 건수가 1,000만 건인 연도별지역별상품매출 테이블에 <출시연도 + 크기>, <색상 + 출시연도> 순으로 구성된 두 개의 B*Tree인덱스가 있었다. 다음 중 이 두 인덱스를 제거하고 아래와 같이 세 개의 비트맵(Bitmap) 인덱스를 생성했을 때, 개별 쿼리의 블록 I/O 측면에서 개선 효과가 가장 미미한 것은?
create bitmap index 연도별지역별상품매출_bx1 on 연도별지역별상품매출(크기);
create bitmap index 연도별지역별상품매출_bx2 on 연도별지역별상품매출(색상);
create bitmap index 연도별지역별상품매출_bx3 on 연도별지역별상품매출(출시연도);

* Distinct Value
   크기 = { NULL, SMALL, MEDIUM, BIG }
   색상 = { NULL, RED, GREEN, BLUE, BLACK, WHITE }
   출시연도 = { NULL, 2001, 2002, 2003, 2004, 2005 2006, 2007, 2008, 2009, 2010 }

* 데이터 분포는 모두 균일

① select count(*) from 연도별지역별상품매출 where 색상 is null;

② select count(*) from 연도별지역별상품매출
      where (크기 = 'SMALL' or 크기 is null)
      and   색상 = 'GREEN'
      and    출시연도 = '2010';

③ select 색상, count(*) from 연도별지역별상품매출 group by 색상;

④ select sum(판매량), sum(판매금액)
      from 연도별지역별상품매출
      where  색상 = 'BLUE';

 

여기서 1번,3번이 기존 B*TREE 인덱스 사용할 시 TABLE FULL SCAN이 발생한다고 해설에 나와있는데,

1번은 B*TREE인덱스 중 <색상+출시연도> 인덱스를 사용하면 색상이 선행칼럼이고 색상에 값이 나타나지

않은 데이터들만 찾아내서 접근하면 TABLE FULL SCAN은 발생하지 않는게 아닌가..이부분이 헷갈립니다.

그리고 나머지는 출제범위 관련 질문인데,

13. 다음 중 아래 t_idx 인덱스가 해당하는 것으로 가장 적절한 것은?
create table t ( a number, b char(3), c varchar2(10) )
partition by range(a) (
partition p1 values less than(100)
, partition p2 values less than(200)
, partition p3 values less than(maxvalue)
);

create index t_idx on t( b ) local ;

① Global Prefixed Partition Index
② Global NonPrefixed Partition Index
③ Local Prefixed Partition Index
④ Local NonPrefixed Partition Index

17. 아래 Call Statistics를 보고 Buffer Cache Hit Ratio를 구하시오.
----------------------------- 아          래 --------------------------------------
call        count     cpu     elapsed     disk      query     current      rows
------    -------   ------  ---------   ------   --------   ---------   -------
Parse       50000     0.51       0.51        0          0           0         0
Execute     50000     3.18       2.91     5000      10000       15000     50000
Fetch           0     0.00       0.00        0          0           0         0
------    -------  ------   ---------   ------   --------   ---------   -------
total      100000     3.70       3.43     5000      10000       15000     50000
--------------------------------------------------------------------------------
24. 일별고객별판매집계 테이블의 PK는 <판매일시 + 고객번호> 순으로 구성되었다. 이 테이블에 DML을 수행하는 다른 트랜잭션이 없는 상황에서 Oracle은 아래 '가', '나', '다' 문장을 어떤 순서로 수행하느냐에 따라 마지막 '라' 문장의 블록 I/O 횟수가 달라진다. 제시된 4가지 수행 순서 보기 중 마지막 '라' 문장을 수행했을 때 블록 I/O가 가장 적게 발생하는 것을 고르시오. ('라' 문장은 PK 인덱스를 이용한다는 사실을 상기하기 바란다.)
가) 3일 이전에 발생한 판매 데이터를 삭제한다.
    delete from 일별고객별판매집계 where 판매일시 < trunc(sysdate) - 2;

나) 고객별로 집계한 금일 판매 데이터를 추가한다.
    insert into 일별고객별판매집계
    select to_char(sysdate, 'yyyymmdd'), 고객번호, sum(판매량), sum(판매금액)
    from   판매
    where  판매일시 between trunc(sysdate) and trunc(sysdate+1)-1/24/60/60
    group by 고객번호;

다) commit;

라) select count(*) from 일별고객별판매집계;

① 가 -> 나 -> 다 -> 라
② 가 -> 다 -> 나 -> 다 -> 라
③ 나 -> 가 -> 다 -> 라
④ 나 -> 다 -> 가 -> 다 -> 라

(이건 SQLD 시험범위인가요;; 올린 문제들 중 특히 궁금합니다)

36. 다음 중 Oracle과 SQL Server의 내부 자료 구조 및 프로세스를 서로 같은 역할을 하는 것끼리 연결할 때 잘못된 것은?

① Log Buffer = Log Cache
② Online Redo Log = Transaction Log
③ Database Writer = LazyWriter
④ Program Global Area = Procedure Cache

37. 다음 중 바인드 변수에 대한 설명으로 가장 부적절한 것을 2개 고르시오.

① 바인드 변수를 사용하면 옵티마이저가 칼럼 히스토그램뿐만 아니라 각종 통계정보를 이용하지 못하게 된다.
② 파티션 테이블을 쿼리할 때 파티션 키 칼럼을 바인드 변수로 조회하면 옵티마이저가 파티션 레벨 통계를 활용하지 못한다.
③ 바인드 변수를 사용하면 옵티마이저는 평균 분포를 가정한 실행계획을 수립한다.
④ 바인드 변수 Peeking(또는 Parameter Sniffing) 기능이 도입되면서 칼럼 히스토그램을 사용할 수 있게 되었고, 이 때문에 바인드 변수 사용에 따른 부작용은 거의 해소되었다.

 

이 문제들 말고 더 있는데.. 위에 올린 문제들은 안봐도 되는거 맞나요?

이 싸이트 맴버 분중 한분이 SQLD시험범위 관련 질문글에 위 문제들이 포함된 기출문제 전부 훑어보는게 좋다고

하시고 튜닝관점에서 공부하라고.. 저는 튜닝공부 안했거든요... 9월 10일이 시험인데 걱정되서 글 써봅니다.

질문이 긴데 조언 부탁드려요;

by jkson [2016.08.30 08:23:49]

5번 문제.. 인덱스는 null 데이터를 포함하지 않으므로 전체데이터 중 null 데이터를 찾으려면 어차피 table full scan을 해야합니다. SQLD 출제 범위는 저도 잘 모르겠으나 시험 많이 보신분들은 주관식 빼고 SQLP와 많은 차이가 없다고 하시는 것으로 보아 되도록 많은 문제를 접해보셔야 하지 않을까 싶네요. 튜닝공부를 전혀 하지 않으셨다면 이번은 그냥 가볍게 어떤 분위기인가 파악해보시는 것으로...; 아무쪼록 파이팅이요~~^^!


by 마농 [2016.08.30 09:21:17]

단일 인덱스의 경우 인덱스에 널이 포함되지 않습니다.
복합 인덱스의 경우 인덱스에 널이 포함될수 있습니다.
(색상 + 출시연도) 인덱스의 경우 출시연도가 널이 아니라면 색상이 널인 자료가 인덱스에 포함됩니다.
그런데...
색상이 널인 자료가 모두 인덱스에 포함되는것은 아닙니다.
색상과 출시연도가 둘 다 널이라면 포함되지 않지요.
따라서 인덱스만 읽어서는 색상이 널인 자료를 모두 뽑을 수 없습니다.


by 찐감자 [2016.08.30 10:42:59]

아하. .감사합니다


by 아발란체 [2016.08.30 13:37:32]

기출 문제 출제율... 체감상 5%입니다. 기출 문제는 참고용이고, D경우 SQL 문제 풀이에 대한 경험이 중요합니다. 문제를 다양하게 많이 풀어보세요~. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입