본문 바로가기

카테고리 없음

MSSQL 공부 정리 2

Operation Description
Clustered Index Scan 테이블에 존제하는 clustered index의 모든 rows를 다 읽어옴
Table Scan 모든 rows를 다 읽음 heap구조안에 있는 것을 다 읽어옴
Clustered Index Seek 찾기 위한 row를 clustered index으로 트리구조화 된 것을 순회
Index Scan 모든 키 벨류를 다 읽어 옴 
Index Seek 선택된 index를 찾기 위해서 트리 구조에서 순회를 하면서 찾음 

 

 

 

Sql Server 조인 연산 종류 및 정리

대표적인 3가지 종류

Nested-Loop Join , Sort- Merge Join, Hash Join

 

 

Nested Loop Join

2개 이상 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 원하는 결과를 조합

 

선행 테이블의 처리 범위를 하나씩 엑세스하면서 추출된 값으로 연결할 테이블을 조인한다.

(이중 포문 생각하면됨)

-좁은 범위에 유리한 성능

-순차적으로 처리하며, 랜덤한 접근 위주

-후행 테이블에 조인을 위한 인덱스 생성

-실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수

- 데이터를 랜덤으로 엑세스하므로 집합이 많으면 느려진다.

-  Join index 가 없거나, 조인 집합을 구성하는 검색조건이 조인 범위를 줄여주지 못할 경우 비효율적

- 테이블 중 row수가 적은 쪽을 driven 테이블로 설정

 

 

 

Sort Merge Join

양쪽 테이블의 처리범위를 각자 access 하여 정렬한 결과를 차례로 Scan 하면서 연결고리의 조건으로

merge

 

-연결을 위해 랜덤 엑세스를 하지 않고 스캔을 하면서 수행

-Nested Loop Join 처럼 선행집합 개념이 없다...

-정렬을 위한 영역에 따라 효율에 큰 차이가 발생한다.

-두 결과집합의 크기 차이가 많이 나는 경우에는 비효율적이다.

-sorting메모리의 위치하는 대상은 join key 뿐만 아니라 select list에 포함 불필요한 select 항목 제거

 

 

Hash Join의 개념

-해싱 함수 기법을 활용해서 조인을 수행한다. 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역에 모아두는 역할

-해시값을 이용해서 테이블을 조인한다.

 

 

-대용량 처리의 선결조건인 랜덤 엑세스와 정렬에 대한 부담을 해결할 수 있는 대안

-병렬처리를 이용한 hash조인은 대용량 데이터를 처리하기 위한 최적의 솔루션

-2개의 조인 테이블 중 작은 rowest를 가지고 해쉬 크기 사이즈에 지정된 메모리 내에서 해쉬 테이블을 생성

-cpu성능에 좌지우지 됨 cbo에서만 가능

-Hash 테이블 생성후 nested loop처럼 순차적인 처리 형태로 수행

 

 

 

scan op는 인덱스에 있는 데이터를 다 읽음 , seek op는 트리구조 기반으로 순회 한다..

 

scan은 아래와 같이 다 돌아 보고 seek은 index가 맞는거 하나 찾음

 

해당 operation은 scan 오퍼레이션이고 cost가 99 프로 ... 자세히 보자