Week1_박우창
2012.07.17 01:54
[1장] 아키텍쳐 기반 튜닝 원리
1. 다음은 실행계획을 공유하지 못하는 같은 의미의 SQL 문장이다. 효율에 가장 영향을 미치는 경우는 어떤 것인가? (p490)
(1)
SELECT * FROM CUSTOMER;
SELECT * FROM Customer;
(2)
SELECT * FROM CUSTOMER;
SELECT /* 고객 데이터 */ * FROM CUSTOMER;
(3)
SELECT * FROM CUSTOMER;
SELECT * FROM HR.CUSTOMER;
(4)
SELECT * FROM CUSTOMER WHERE LOGIN_ID = 'tommy';
SELECT * FROM CUSTOMER WHERE LOGIN_ID = 'karajan';
2. Dynamic SQL에 대한 설명 중 틀린 것은? (p495)
(1) Static SQL과 차이점은 SLQ 문이 실행시 동적으로 바뀐다는 점이다.
(2) Precompile시 syntax, semantic 체크가 불가능하다.
(3) Toad, Orange 같은 툴에서 적성하는 SQL은 Dynamic SQL이다.
(4) String 형 변수에에 담지 않고 코드사이에 직접 기술한 SQL을 말한다.
3. 다음 Oracle과 Sqlserver의 파일 구조에 관한 용어를 서로 대응시켜본 것이다 가장 거리가 먼 것은?(p478)
(Oracle-SQLServer 순서)
(1) 블록-페이지
(2) 테이블 스페이스-파일 그룹
(3) Redo 로그-Transaction 로그
(4) Archived Redo 로그 - Online Redo 로그
[2장] Lock와 트랜잭션 동시성 제어
4. SQL Server LOCK의 종류가 아닌 것은? (p536)
(1) 공유 LOCK
(2) 배타적 LOCK
(3) 의도 LOCK
(4) 테이블 LOCK
5. Dirty READ 현상이 발생하는 격리성 수준을 골라라 (p543)
(1) READ UNCOMMITTED
(2) READ COMMITTED
(3) REPEATABLE READ
(4) SERIALIZABLE READ
6. 동시성제어에 관한 설명중 틀린 것은?(p547)
(1) 동시성을 높이려면 Lock을 최소화 해야한다.
(2) 비관적동시성제어와 낙관적동시성제어가 있다.
(3) 낙관적동시성제어는 배타락을 사용하지 않는다.
(4) 비관적동시성제어는 공유락을 사용한다.
[3장]
7. 다음 중 쿼리변환에 해당되지 않는 것은? (p571)
(1) 서브쿼리 NESTING
(2) 뷰머징
(3) 조건절 푸싱
(4) 불필요한 조인 제거
8. 다음은 SQL 문에 대하여 옵티마이저가 쿼리변환을 하여 수행한 실행계획이다. 해당되는 쿼리변환 이름은? (p574)
select * from emp where deptno in (select deptno from dept) ------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes| Cost (%CPU)| ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 10 | 350 | 2 (0) | | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 3 | 99 | 1 (0) | | 2 | NESTED LOOPS | | 10 | 350 | 2 (0) | | 3 | INDEX FULL SCAN | DEPT_PK | 4 | 8 | 1 (0) | |* 4 | INDEX RANGE SCAN | EMP_DEPTNO_IDX | 3 | | 0 (0) | ------------------------------------------------------------------ Predicate Information (identified by operation id): ------------------------------------------------------------------ 4 - access("DEPTNO"="DEPTNO") |
(1) 서브쿼리 UNNESTING
(2) 뷰머징
(3) 조건절 푸싱
(4) 불필요한 조인 제거
9. Oracle 에서 힌트가 무시되는 경우를 설명한 것이다. 해당되지 않는 것은?(p568)
(1) 참조하는 테이블이 없을 때
(2) 참조하는 인덱스 이름이 맞지 않을때
(3) 힌트보다 더 좋은 실행계획이 있을 때
(4) 다른 주석과 문장이 섞여있을 때
[4장] 인덱스와 조인
10. 인덱스를 재 생성해야하는 경우가 아닌 것은? (p612)
(1) 인덱스 분할에 의한 경합이 현저히 높을 때 자주 사용되는 인덱스 스캔 효율을 높이고자 할 때.
(2) NL Join에서 반복 액세스되는 인덱스 높이(height)가 증가했을 때
(3) 대량의 delete 작업을 수행한 이후 다시 레코드가 입력되기까지 오랜 기간이 소요될 때
(4) 총 레코드 수가 일정한데도 인덱스가 계속 줄어들때
11. 클러스터형 인덱스가 유용한 경우가 아닌 것은? (p618)
(1) 넓은 범위를 주로 검색하는 테이블
(2) 데이터 입력과 조회 패턴이 서로 같은 테이블
(3) 칼럼 수가 적고 로우 수가 많은 테이블
(4) 크기가 작고 NL Join으로 반복 룩업하는 테이블
12. 질의문이 인덱스를 사용할 경우 인덱스의 맆노드 개수에 영향을 받지 않은 인덱스 스캔 방법은?(p600)
(1) Index Unique Scan
(2) Index Skip Scan
(3) Index Fast Full Scan
(4) Index Range Scan
[5장] 고급 SQL 튜닝
13. 다음은 정렬이 필요한 SQL 문이다. 그렇지만 인덱스를 키 컬럼 순으로 생성하면 정렬을 하지 않고 인덱스를 이용하여 질의 결과를 계산할 수 있다. 다음 질의와 인덱스 생성을 보고 여기에 해당되는 것과 가장 거리가 먼 것을 찾아라. (p700)
(1) select * from customer where X='A' order by Y
- (X+Y)로 인덱스를 만든다
(2) select distinct X from emp order by X
- (X)로 인덱스를 만든다.
(3) select X, count(*) from customer group by X
- (X)로 인덱스를 만든다.
(4) select max(X+Y) from 주문 where X=10;
- (X, Y)로 인덱스를 만든다.
14. 다음 중 소트를 발생시키지 않은 질의는? (p689)
(1) select count(*), max(sal) from emp;
(2) select * from emp order by ename;
(3) select deptno, count(*) from emp group by deptno order by deptno;
(4) select empno from emp union select empno from emp where empno=10;
15. Hash Join을 사용하면 좋은 상황을 설명한 것이다. 틀린 것은?(p651)
(1) 조인컬럼에 적당한 인덱스가 없어서 NL 조인이 비효율적일 때
(2) 조인컬럼에 인덱스가 있지만 NL조인 드라이빙 집합에서 인너조인으로 조인액세스량이 많아 Random 액세스 부하기 심할 때
(3) Sort Merge 조인하기에 두 테이블이 너무 커 소트부하가 심할 때
(4) 수행빈도가 낮고 쿼리수행시간이 적게걸리는 테이블을 조인할 떄
[주관식]
1. 다음 SQL 문은 SORT 연산을 발생시킨다. 질의를 바꾸어 SORT 연산이 발생하지 않도록 해보아라. (p696)
(질의)
select distinct deptno
from emp;
(변경된 질의)
select deptno
from emp a
where exists ( ? );
2. 다음 빈칸(*)에 들어갈 문장을 적어라
SQL> create index emp_deptno_idx on emp(deptno);
SQL> select * from emp where deptno = 20;
Oracle
Execution Plan ------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (TABLE)
2 1 (*) OF 'EMP_DEPTNO_IDX' (INDEX)
SQLServer
StmtText
------------------------------------------------------------- |--Nested Loops(Inner Join, OUTER REFERENCES:([Bmk1000]))
|-- (*) (OBJECT:([..].[dbo].[emp].[emp_deptno_idx]), SEEK:([deptno]=20) ORDERED FORWARD)
|--RID Lookup(OBJECT:([..].[dbo].[emp]), SEEK:([Bmk1000]=[Bmk1000]) LOOKUP ORDERED FORWARD)
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
» | Week1_박우창 [1] | balto | 2012.07.17 | 10905 |
57 | Week1_이주영 | suspace | 2012.07.17 | 5058 |
56 | Week1_승대수 | 보라빛고양이 | 2012.07.16 | 3080 |
55 | Week1_이진우 [5] | ljw | 2012.07.16 | 46487 |
54 | Week1_위충환 [1] | 실천하자 | 2012.07.16 | 9307 |
53 | 문제작성 | 실천하자 | 2012.07.16 | 5816 |
52 | 제5절_배치_프로그램_튜닝 | 보라빛고양이 | 2012.07.04 | 6970 |
51 | 제4절_파티션_활용 | 오예스 | 2012.06.25 | 5795 |
50 | 제3절_DML_튜닝 | balto | 2012.06.13 | 9134 |
49 | 제1절_고급_SQL_활용 | 실천하자 | 2012.06.11 | 6334 |
48 | 제1절 고급 SQL 활용 | 실천하자 | 2012.06.11 | 8427 |
47 | 제4절_고급_조인_기법 | suspace | 2012.06.04 | 31327 |
46 | 제2절_소트_튜닝 | ljw | 2012.06.04 | 12050 |
45 | 제3절 조인 기본 원리 | 보라빛고양이 | 2012.05.29 | 7012 |
44 | 제1절_인덱스_기본_원리 | 오예스 | 2012.05.22 | 7125 |
43 | 제2절_인덱스_튜닝 | balto | 2012.05.18 | 9923 |
42 | 제2절_쿼리변환 | ljw | 2012.05.13 | 5641 |
41 | 제1절_옵티마이저 | 실천하자 | 2012.05.11 | 7209 |
40 | 제3절_동시성_제어 | 운영자 | 2012.05.07 | 6068 |
39 | 제1절_Lock | balto | 2012.05.04 | 25294 |
1)4 : SQL 문이 문자열 때문에 바뀌면서 라이브러리 캐시의 효율에 영향을 미친다.
2)4 : String 현 변수에 담아서 기술하는 SQL 문이다.
3)4 : SQL Server에는 Archive Redo 로그가 없다.
4)(정답없음) : 교재에는 SQL Server의 테이블 LOCK에 대한 설명이 없으나 기능은 있다(확인필요)
5)1 :
6)3 : 낙관적동시성제어도 배타락을 사용한다.
7)1 : 서브쿼리 UNNESTING
8)1 :
9)3
10)4 : 총 레코드 수가 일정한데도 인덱스가 계속 커질때
11)2 : 데이터 입력과 조회 패턴이 서로 다른 테이블
12)3 인덱스만 사용하고 맆노드 사용 안함
13)4 정렬과 상관없음
14)4:
15)4: 수행빈도가 낮고 쿼리수행시간이 오래걸리는 테이블을 조인할 떄
주관식1)
select deptno
from dept a
where exists ( select deptno
from emp
where deptno = a.deptno)
주관식2) INDEX(RANGE SCAN) - Oracle
Index Seek - SQL Server