다음 문제를 풀어보세요.


17.67. 물리적 데이테베이스 설계 단계에서 색인 구조를 결정하는데 도움이 되는 지침으로 틀린것은?


1. 한 애트리뷰트에 들어 있는 상이한 값들의 개수가 전체 레코드의 수와 비슷하고 검색에서 해당 애트리뷰트에 대한 동등 조건이 사용된다면 비 클러스터링(non-clustering) 색인을 생성하는 것이 좋다.


2. 갱신이 빈번하게 이루어지는 릴레이션에 대해서 색인을 많이 생성하여 갱신의 효율성을 증진할 수 있다.


3. 가능하면 정수형 애트리뷰트에 색인을 만드는 것이 좋고 반대로 VARCHAR 데이터 타입을 갖는 애트리뷰트에는 색인을 만드는 것을 피해야 한다.


4. 대량의 데이터를 사입할 때는 모든 색인들을 제거하고 데이터 삽입이 끝난 후에 색인들을 다시 생성하는 것이 효율적이다.



 

쿼리(Query) 종류


포인트쿼리 (Point query) 


조회되는 데이터가 한두개

select * from member where id='ryu'


범위쿼리 (Range query)
 

조회되는 데이터가 다수 
select * from member where date='2008/06/19'


커버드쿼리 (Covered query)

조회의 대상과 조회의 결과가 컬럼이 일치하는 상태. 인덱스 측면에서 제일 빠른 성능을 냄


Point query : select * from member where id='ryu' and pw='1234'

Covered query: select id from member where id='ryu' and pw='1234'




인덱스의 개념


인덱스는 데이터를 찾을 때(SELECT) 때 빨리 찾기 위해서 사용한다. 인덱스가 없다면 특정한 값을 찾기 위해 모든 데이터 페이지를 다 뒤져야 한다. 이것을 Table Scan 이라고 한다. 인덱스가 찾고자 하는 컬럼이나 표현식에 대해 존재하고, 인덱스를 사용하는 것이 더 효과적이라면, SQL 서버는 모든 페이지를 뒤지지 않고 인덱스 페이지를 찾아서 쉽게 데이터를 가져온다. 이것을 Index Seek라고 한다.

 인덱스의 단점

- 만드는데 시간이 걸린다.

- 만드는데 많은 공간이 필요하고, 만들고 난 후에도 추가적인 공간이 필요하다.

- 데이터를 수정(INSERT, UPDATE, DELETE)하는 시간, 특히 INSERT 작업은 오히려 더 많이 걸린다.


☞ 인덱스를 걸어야 할 컬럼

- WHERE 절에서 자주 사용되는 컬럼

- 자주 검색되는 컬럼(SELECT 절에서)

- 기본 키는 자동적으로 클러스터 인덱스가 만들어 진다.

- 참조 키(Foreign Key)에 인덱스를 걸면 조인 사용할 때에 조인의 속도를 향상시킨다. 색인이 자동적으로 만들어지지 않는다.

- 자주 JOIN으로 사용하는 컬럼(참조 키가 아닐 때)

- 정렬된 순서로 자주 사용되는 컬럼(가능하다면 클러스터 인덱스를 만드는 것이 좋다)

- 범위를 주고 찾는 컬럼(가능하다면 클러스터 인덱스를 만드는 것이 좋다)


인덱스를 걸지 않아야 할 컬럼

- 좀처럼 검색되지 않는 컬럼

- 전체 중 상당 부분을 가져오는 질의에 사용되는 컬럼

- 유일성, 또는 같은 값이 많은 컬럼

SELECT 속도보다 데이터의 변경 속도가 훨씬 중요할 때(되도록 색인의 수를 최소화 한다.)




인덱스의 종류


클러스터 인덱스 (Clustered Index)


① 테이블마다 단 한개의 클러스터 인덱스가 존재한다. 
② 물리적인 행(데이터)의 순서가 인덱스의 순서와 동일하다.
③ 인덱스의 맨 마지막 단계인 리프 레벨(Leaf Level)이 곧 데이터 페이지이다.
④ 실제 데이터의 순서와 인덱스의 순서가 일치하기 때문에 일정한 범위를 주고 찾는 경우 속도 향상에 도움이 된다.
⑤ Non-Clustered Index에 비해 색인의 단계가 한 단계 적기 때문에 색인의 크기도 작고 그만큼 빨리 찾을 수 있다.
⑥ 새로운 데이터가 입력되면 항상 물리적 순서를 색인의 순서에 맞추어야 하기 때문에 많은 데이터가 자신의 자리를 찾는 작업을 해야 하므로 이 부분에서는 오히려 넌클러스터드 인덱스보다 느리다.


넌-클러스터 인덱스 (Non-Clustered Index)

① 물리적인 행의 순서가 색인의 순서와 동일하지 않다. 

② 리프 레벨은 데이터 페이지가 아니다.

③ 리프 레벨에서 한 단계 더 내려가야만 데이터 페이지이다. 따라서 클러스터 색인보다 한 단계를 더 거쳐야 실제 찾고자 하는 데이터에 도달할 수 있다.

'정보시시스템감리사 > 데이터베이스' 카테고리의 다른 글

권한부여 (GRANT, REMOKE)  (0) 2017.09.07
질의 최적화 기법  (0) 2017.09.01
조인 선택률(join selectivity)  (0) 2017.08.31
데이터 마이닝 분석기법 종류  (0) 2017.08.29
교착상태 (deadlock)  (0) 2017.08.29

+ Recent posts