다음 문제를 풀어보세요.
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)
② 리프 레벨은 데이터 페이지가 아니다.
③ 리프 레벨에서 한 단계 더 내려가야만 데이터 페이지이다. 따라서 클러스터 색인보다 한 단계를 더 거쳐야 실제 찾고자 하는 데이터에 도달할 수 있다.
'정보시시스템감리사 > 데이터베이스' 카테고리의 다른 글
권한부여 (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 |