2014-11-16 3 views
1

우리가 알다시피, 클러스터 된 인덱스가 생성 될 때 인덱스 키 데이터는 B- 트리 구조에 저장됩니다. B- 트리의 Bottom 레벨은 테이블에 대한 실제 데이터 행을 포함하는 리프 노드이며 모두 리프 노드는 다음과 이전 리프 노드 을 가리 킵니다. 이중 링크리스트를 사용하여 리프 노드를 연결하는 목적을 알고 싶습니다. 나는 잎을 노드를 연결하는 이중 연결리스트를 사용하는 목적을 알고 싶어 내 질문에리프 노드가 클러스터 된 인덱스로 서로 연결된 이유는 무엇입니까?

답변

3

어떤 대답에 감사합니다.

범위 쿼리를 수행 할 때 앞뒤로 정렬 된 데이터를 가져 오는 효율적인 방법입니다.

예 : 위의 쿼리는 인덱스 20에서 추구하고있는 모든 행을 반환 ID = 10에 거꾸로 인덱스를 스캔 할 수있는 ID의 인덱스와

select ID 
from YourTable 
where ID between 10 and 20 
order by ID desc 

.

+0

메커니즘을 설명 할 수있는 다른 장점이 있습니까? –

+1

@RebornXu : "효율성"은 여기에 절제되어 있지 않습니다. SQL Server가 없으면 페이지가 완료 될 때마다 트리를 다시 트래버스해야하고 다음 페이지를 찾고 싶다는 점을 고려하면 상당히 큰 이점입니다. 또한'SELECT TOP (200)'질의 또는 다른 비 인덱스 필드를 스캔해야하는 질의에 대해서 생각해보십시오. –

+0

@RebornXu이 예제가 꽤 많이 요약 된 것 같습니다. 물론 유익한 많은 쿼리가 있지만 인덱스 범위를 스캔하는 것만으로 끝납니다. 고유하지 않은 키와의 동일성은 하나이며, 병합 조인 연산자로 정렬해야하기 때문에 병합 조인이있는 두 개의 큰 테이블을 조인하는 것이 더 깁니다. –

관련 문제