이 내용은 2011년 6월 현재 SQL2011(코드명 Denali) Beta를 기준으로 작성
되었으며 SQL2011(코드명 Denali) 공식버전(RTM) 발표까지 꾸준히 업데이트 예정입니다.
아울러, 현재 Beta버전이지만 강좌를
따라해 보시는데 아무 문제 없으실거에요. 도움 되시길
바랍니다.
==================================================================================================
안녕하세요. 이스트럭(강동운) 입니다.
오늘은 드디어 SQL Server에서 가장 중요한
인덱스에 대해서 알아볼 차례 입니다.
원문: http://www.sqler.com/127350
이번에 소개해드릴 내용은 색인 입니다.
색인이라는 주제는 사실 매우 광범위하고 성능에 지대한 영향을 줄 수 있는 주제 입니다.
아울러 SQL서버의 상당한 내부적인 구조를 알아야 하므로 대단히 많은 분들이 꺼려하고
어려워하는 부분이기도 하지요. 실제로 사이트에 나가 튜닝 작업을 할 경우 먼저 보는
부분이기도 합니다. 그럼 이제 이 색인에 대해서 찬찬히 알아 보도록 하지요. ^_^
색인은 무엇인가?
데이터를 담고 있는 최소 단위가 모라고 말씀 드렸죠? 네 바로 페이지라고 말씀 드렸죠.
이 페이지에 실제 로우 데이터가 들어 있다고 말씀 드렸습니다. 물론 페이지 헤더와 옵셋
정보 역시 페이지에 포함되어 있지만, 저희는 데이터만 있다는 가정을 먼저 해 보도록 하죠.
그렇다면 색인은 무엇인가?
색인은 트리구조(계층형)로 이루어져 있는 실제 페이지의 데이터를 포인팅하는
데이터 입니다.
많은 분들이 오해하는 부분을 말씀 드리지요.
1. 색인은 공간을 차지하지 않는다. - 아뇨. 색인의 종류에 따라 가변적으로 인덱스의
크기가 잡힙니다. 물론 실제 데이터에 비례적인 크기가 되지요. - 종류별로 정확한
크기 예측은 힘들죠. 중요한건 색인 역시 데이터라는 겁니다.
2. 색인을 만들면 항상 빠르다. - 벌써 드릴 말씀은 아니지만 잘 만들어야 빠릅니다.
걱정마세요. 이번에 잘 만드는 방법을 배워 보세요.
3. 데이터가 적어도 인덱스가 유용하다. - 아닙니다. 데이터가 많을 수록 인덱스는
환상의 속도를 비례적으로 낼 수 있습니다. - 권고적으로 테이블의 크기가
대략 1M 정도보다 작으면 역시나 인덱스가 없는게 유용할 수 있습니다.
우선 위 세가지만 말씀 드리고 잘못 이해하는 부분을 또 찬찬히 말씀 드리지요.
색인의 모식도를 한번 봐 보도록 할까요?
우선 다음과 같은 회원 테이블 정보가 있다고 생각해 보도록 하지요.
이 회원 테이블은 보시는 바와 같이 번호, 이름, 생긴정도를 포함하고 있습니다.
번호와 이름은 믿을만한 정보이나 모든 정보가 믿을만한건 아닙니다. - 주의하세요.
-_-;;
여하간 이런 부분이 실제 데이터페이지에는 어떻게 기록이 되어 있을까요?
내부 데이터 페이지에는 위와 같은 방식으로 저장되어 있을 겁니다.
만약 제가 다음처럼 번호 컬럼의 값을 찾고자 한다고 생각해 보도록 하지요.
이렇게요. 만약 제가
1 번 번호를 찾으려 한다면? 와우~ 1번에 찾았군요. 1번 페이지에 있으니 8K Byte의 IO로
찾았습니다.
7번 번호를 찾으려 한다면? 3번째 페이지에 있네요. 3 * 8K Byte 크기의 IO로 찾았습니다.
만약 13번을 찾으려 한다면? 4페이지에 있으니 32K Byte가 소요 됩니다.
데이터가 늘어나 만약 10만번째를 찾으려 한다면? 대단한 IO가 발생하겠지요?
이럴때 인덱스의 구조와 속도를 찬찬히 이해해 보도록 하세요.
만약 이것이 혹시 기억나실지 모르지만.. C를 배우신 분이라면 B-Tree를 아실 겁니다.
Balanced Tree 라고 불리는 구조로 이것이 생성되어 있다면?
여기서 잠시만. 이것은 실제 인덱스의 그림과는 다른 구조이나 제가 몇번 강의를 하면서
이해하기 쉽도록 그린 그림입니다. 이그림은 잘 이해 하시는데 다음 장에서 설명할
그림을 잘 못 이해 하시더라구요. 인덱스 모식도를 그려 볼까요?
대략 이런 식이 될겁니다. 저게 뭐냐구요? 찬찬히 설명을 드리지요.
밸런스드 트리의 근간은 말 그대로 밸런스 입니다. 균형이 중요하다는 거지요.
여기서 이렇게 생각해 볼까요?
위와 똑 같이.
1번을 찾으려 하면? 맨위의 7을 보니 1 <> 7 그러므로 아래를 보니 4, 9 ,13이 있네요.
그후. 1 < 4 그러니 4로 가면 되겠지요? 4로 가서 딱 보니 1이 있는 겁니다.
각각의 단계를 페이지와 비교해 보죠. 7에서 1개 페이지. 4에서 1개페이지를 보니 우리의 값인
1이 보이죠? 3개의 페이지를 읽었습니다.
다음 7번을 찾으려 하면? 어라 웬일이죠? 맨 위에서 찾았어요.
그렇죠? 땡잡았네요. 1개 페이지만에 OK
다음 13 을 보면 역시 2번에 찾을수 있겠죠?
자 저 트리의 깊이가 한단계 두단계 늘어난다고 생각해 보세요?
지금은 비록 편균적으로 3개 정도면 읽을 수 있겠지만. 노드가 늘어갈수록..
4개 페이지를 읽어 많은걸 볼 수 있구.. 5개 노드면 더 많이.. 그런 식으로 실제 테이블의
맨위부터 차근차근 긁을 때보다. - 요걸 풀스캔이라고 하죠. - 더 적은 IO로 원하는 데이터를
읽을 수 있겠지요.
여기서 중요한 용어를 이해해 보도록 하죠.
계속적으로 이야기가 나오겠지만. 위처럼 최상위위치를 Root 레벨이라고 부릅니다.
중간 단계의 레벨, 위에서는 중간 레벨이 하나 뿐이지만 B-Tree의 데이터가 많아 질수록
중간 레벨은 계속 늘어날 수 있겠죠? 이녀석들을 Non-Leaf 레벨이라고 부릅니다.
또는 중간레벨(Inertmediate Level) 라고 부르기도 합니다.
레벨대신 가끔 노드라고도 하지요.
끝으로 최하위의 레벨을 부를 때 Leaf레벨 또는 Leaf 노드라고도 하지요.
한글로는 각각 뿌리수준 / 잎이아닌 수준, 또는 가지단계, 또는 중간단계 / 잎수준
이라고 부르기도 합니다.
자 이제 기본적인 인덱스의 형태에 대한 이야기는 간단히 드렸구요. 다음 장에서 실제
인덱스들을 가지고 이야기를 풀어 보도록 하지요.
감사합니다.
[출처] SQLER.COM http://www.sqler.com/392661
SQL2011(코드명 Denali) 시리즈 강좌
리스트
[SQL2011강좌] 1. 코드명
Denali 설치 방법
[SQL2011강좌] 2.
SSMS 접속 및 간단한 쿼리 실행
[SQL2011강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스 생성하기
[SQL2011강좌] 4. DDL 1탄: 테이블 생성
[SQL2011강좌] 5. DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가
및 삭제
[SQL2011강좌] 6. Primary
key와 Unique 제약조건
[SQL2011강좌]
7. DML 1탄 INSERT
[SQL2011강좌]
8. DML 1탄 INSERT(identity 속성)
[SQL2011강좌] 9. Sequence
[SQL2011강좌] 10. pubs, northwind Database 예제 설치
[SQL2011강좌] 11. SELECT(단일 테이블)
[SQL2011강좌] 12. SELECT(JOIN)
[SQL2011강좌] 13. UPDATE, DELETE
절
[SQL2011강좌] 14. DISTINCT,
UNION, UNION ALL 키워드
[SQL2011강좌] 15. ORDER BY, GROUP BY, HAVING
[SQL2011강좌] 16. SubQuery(서브쿼리)
[SQL2011강좌] 17. 뷰에 대한 이해 및 생성, 수정,
삭제
[SQL2011강좌] 18. 저장 프로시저에 대한
이해, 생성, 수정, 삭제
[SQL2011강좌] 19.
인덱스에 대한 이해
[SQL2011강좌] 20.
클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011강좌] 21. 트랜잭션에 대한이해
[SQL2011강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011강좌] 23. 잠금에 대한 이해
[SQL2011강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그 백업)
[SQL2011강좌] 25. 백업과 복구 전략
[SQL2011강좌] 26. 커서란?
SQL2011(코드명 Denali) 시리즈
동영상 강좌 리스트
[SQL2011 동영상 강좌] 1. 코드명 Denali 설치 방법
[SQL2011 동영상 강좌] 2.
SSMS 접속 및 간단한 쿼리 실행
[SQL2011 동영상 강좌] 3. SQL Server 의 MDF, LDF 그리고 데이터베이스
생성하기
[SQL2011 동영상 강좌] 4. DDL 1탄: 테이블 생성
[SQL2011 동영상 강좌] 5.
DDL 2탄: 쿼리를 이용한 테이블 컬럼 추가 및 삭제
[SQL2011 동영상 강좌] 6. Primary key와 Unique
제약조건
[SQL2011 동영상 강좌] 7. DML 1탄 INSERT
[SQL2011 동영상 강좌] 8.
DML 1탄 INSERT(identity 속성)
[SQL2011 동영상 강좌] 9. Sequence
[SQL2011 동영상 강좌] 10.
pubs, northwind Database 예제 설치
[SQL2011 동영상 강좌] 11. SELECT(단일 테이블)
[SQL2011 동영상 강좌] 12.
SELECT(JOIN)
[SQL2011 동영상 강좌] 13. UPDATE, DELETE 절
[SQL2011 동영상 강좌] 14.
DISTINCT, UNION, UNION ALL 키워드
[SQL2011 동영상 강좌] 15. ORDER BY, GROUP BY,
HAVING
[SQL2011 동영상 강좌] 16. SubQuery(서브쿼리)
[SQL2011 동영상 강좌] 17.
뷰에 대한 이해 및 생성, 수정, 삭제
[SQL2011 동영상 강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제
[SQL2011 동영상 강좌] 19.
인덱스에 대한 이해
[SQL2011 동영상 강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스
[SQL2011 동영상 강좌] 21.
트랜잭션에 대한이해
[SQL2011 동영상 강좌] 22. 트랜잭션의 격리수준 4가지
[SQL2011 동영상 강좌] 23.
잠금에 대한 이해
[SQL2011 동영상 강좌] 24. 백업과 복구에 대한 이해(풀백업, 차등백업, 트랜잭션 로그
백업)
[SQL2011
동영상 강좌] 25. 백업과 복구 전략
[SQL2011 동영상 강좌] 26. 커서란?
'프로그램&DB > MS-SQL' 카테고리의 다른 글
[MS-SQL2011강좌] 21. 트랜잭션에 대한이해 by 강동운님 (0) | 2011.08.23 |
---|---|
[MS-SQL2011강좌] 20. 클러스터드 인덱스와 넌 클러스터드 인덱스 by 강동운님 (0) | 2011.08.23 |
[MS-SQL2011강좌] 18. 저장 프로시저에 대한 이해, 생성, 수정, 삭제 by 강동운님 (0) | 2011.08.23 |
[MS-SQL2011강좌] 17. 뷰에 대한 이해 및 생성, 수정, 삭제 by 강동운님 (0) | 2011.08.23 |
[MS-SQL2011강좌] 16. SubQuery(서브쿼리) by 강동운님 (0) | 2011.08.23 |