| 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은 아래와 같이 다 돌아 보고 seek은 index가 맞는거 하나 찾음

