Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

DBDBDEEP

2.1.3 인덱스 수직/수평적 탐색 본문

친절한 SQL 튜닝

2.1.3 인덱스 수직/수평적 탐색

Kihwane 2026. 5. 16. 20:00

수직적탐색

정렬된 인덱스 레코드 조건을 만족하는 번째 레코드를 찾는 과정. 인덱스 스캔 시작지점을 찾는 과정.

 

인덱스의 수직적 탐색은 루트(Root) 블록에서부터 시작한다.

루트를 포함해 브랜치 블록에 저장된 인덱스 레코드는 하위 블록에 대한 주소값을 갖는다. 루트에서 시작해 리프(Leaf) 블록까지 수직적 탐색이 가능한 이유

 

수직적 탐색은 '조건을 만족하는 번째 레코드' 찾는 과정이다.

 

 

1. 인덱스에서 중요한 것은 리프 노드 탐색 시작점과 끝점을 아는

 

시작점을 찾는 행위를 수직 탐색, 끝점까지 찾는 행위를 수평탐색이라고 한다.

 

수직탐색 : 조건을 만족하는 첫번째 레코드를 찾는 과정을 의미한다.

수평탐색 : 찾고자 하는 데이터가 나타날 때까지 리프 블록을 스캔하는 과정을 의미한다.

 

 

LMC : Left Most Chid (인덱스 탐색 시작점의 처음을 의미함)

 

위에서 강덕승 & 찾는다면 리프인덱스 1,2 조회해야한다.

수직탐색은 조건을 만족하는 첫번째 레코드를 (리프블록) 찾는 것을 의미하고
수평탐색은 조건을 찾고자하는 데이터가 ' 이상' 나타날 때까지 스캔함.

 

위와 같이 리프블록을 하나만 탐색하는 것이 아닌, 2개를 탐색하고 있다. Unique 칼럼이라면 disk에서 읽어와야 하는 block i/o 수가 1 뿐이라 빠르게 조회할 있다.

 

위에서 강덕승 & 많아진다면???? 값이 분산도가 낮아지게되고, 읽어야 리프 노드들이 많아질 것이다.

그래서 수평으로 읽어야 리프블록들의 수가 많아지게된다. 인덱스 탐색 카디널리티가 중요한 이유이다.

 

 

인덱스 수평탐색 이유는
1.
조건절을 만족하는 데이터를 모두 찾기 위해서
2. ROWID 얻기 위해서이다.

 

필요한 컬럼을 인덱스가 모두 갖고있어 인덱스만 스캔하고 끝나는 경우도 있지만 일반적으로는 인덱스를 스캔하고서 테이블도 액세스하게 된다. ROWID 필요하다.