bestsource

테이블 검색과 클러스터형 인덱스 검색의 차이점은 무엇입니까?

bestsource 2023. 7. 13. 20:59
반응형

테이블 검색과 클러스터형 인덱스 검색의 차이점은 무엇입니까?

둘 다 a이기 때문에Table Scan a 리고a.Clustered Index Scan기본적으로 테이블의 모든 레코드를 검색합니다. 클러스터형 인덱스 검색이 더 나은 이유는 무엇입니까?

예를 들어, 레코드가 많은 경우 다음과 성능 차이는 무엇입니까?

declare @temp table(
    SomeColumn varchar(50)
)

insert into @temp
select 'SomeVal'

select * from @temp

-----------------------------

declare @temp table(
    RowID int not null identity(1,1) primary key,
    SomeColumn varchar(50)
)

insert into @temp
select 'SomeVal'

select * from @temp

클러스터된 인덱스가 없는 테이블(히프 테이블)에서는 데이터 페이지가 함께 연결되지 않으므로 페이지를 이동하려면 인덱스 할당 맵을 조회해야 합니다.

그러나 클러스터된 테이블은 데이터 페이지를 이중으로 연결된 목록으로 연결하여 순차적 검색을 조금 더 빠르게 수행합니다.물론, 그 대가로, 당신은 데이터 페이지를 순서대로 유지하는 것에 대한 오버헤드를 가지고 있습니다.INSERT,UPDATE,그리고.DELETE그러나 힙 테이블의 경우 IAM에 두 번째 쓰기가 필요합니다.

에 쿼에다있경이 RANGE연산자(예: SELECT * FROM TABLE WHERE Id BETWEEN 1 AND 100그러면 인덱스 페이지를 사용하여 관련 데이터 페이지를 찾을 수 있으므로 클러스터된 테이블(보장된 순서대로)이 더 효율적입니다.힙은 순서 지정에 의존할 수 없기 때문에 모든 행을 검색해야 합니다.

그리고 물론 클러스터링된 인덱스를 사용하면 성능에 매우 최적인 클러스터링된 인덱스 검색을 수행할 수 있습니다.인덱스가 없는 힙은 항상 테이블 검색을 수행합니다.

그래서:

  • 모든 행을 선택하는 예제 쿼리의 경우 클러스터된 인덱스가 유지 관리하는 이중 링크 목록만 다릅니다.이렇게 하면 클러스터된 테이블이 행 수가 많은 힙보다 조금 더 빨라집니다.

  • 를사한조경우가 있는 WHERE클러스터된 인덱스에 의해 (적어도 부분적으로) 충족될 수 있는 절, 주문 때문에 앞으로 나올 것이므로 전체 테이블을 스캔할 필요가 없습니다.

  • 클러스터된 인덱스로 충족되지 않는 쿼리의 경우, 거의 짝수입니다. 다시 한 번 말하지만, 순차적 검색을 위해 이중으로 연결된 목록만 다를 뿐입니다.어떤 경우든, 당신은 차선책입니다.

  • 위해서INSERT,UPDATE,그리고.DELETE산더미가 이길 수도 있고 못 이길 수도 있습니다.힙은 순서를 유지할 필요가 없지만 IAM에 두 번째 쓰기가 필요합니다.상대적인 성능 차이는 무시할 수 있지만 데이터에 따라 상당히 다를 것이라고 생각합니다.

Microsoft는 클러스터된 인덱스를 힙의 비클러스터된 인덱스와 비교하는 백서를 제공합니다(위에서 설명한 것과 정확히 동일하지는 않지만 가까운).그들의 결론은 기본적으로 모든 테이블에 군집화된 인덱스를 놓는 것입니다.결과를 요약하기 위해 최선을 다하겠습니다(여기서는 비클러스터형 인덱스와 클러스터형 인덱스를 비교하고 있지만 비교적 비슷하다고 생각합니다).

  • INSERT성능: 힙에 필요한 두 번째 쓰기로 인해 클러스터된 인덱스가 약 3% 증가합니다.
  • UPDATE성능: 힙에 필요한 두 번째 조회로 인해 클러스터된 인덱스가 약 8% 증가합니다.
  • DELETE성능: 힙에 대한 두 번째 검색과 IAM에서 두 번째 삭제가 필요하기 때문에 클러스터된 인덱스가 약 18% 향상됩니다.
  • 싱글SELECT성능: 힙에 필요한 두 번째 조회로 인해 클러스터된 인덱스가 약 16% 향상되었습니다.
  • 범위SELECT성능: 힙에 대한 임의 주문으로 인해 클러스터된 인덱스가 약 29% 향상되었습니다.
  • 동시의INSERT클러스터된 인덱스에 대한 페이지 분할로 인해 로드 시 힙 테이블이 30% 증가합니다.

http://msdn.microsoft.com/en-us/library/aa216840(SQL.80).aspx

클러스터된 인덱스 검색 논리적 및 물리적 연산자는 인수 열에 지정된 클러스터된 인덱스를 검색합니다.선택적 WHERE:() 술어가 있는 경우 술어를 충족하는 행만 반환됩니다.인수 열에 ORDERED 절이 있는 경우 쿼리 프로세서는 클러스터된 인덱스가 정렬한 순서대로 행의 출력을 반환하도록 요청했습니다.ORDERED 절이 없는 경우 스토리지 엔진은 최적의 방법으로 인덱스를 스캔합니다(출력이 정렬된다는 보장은 없음).

http://msdn.microsoft.com/en-us/library/aa178416(SQL.80).aspx

테이블 스캔 논리적 및 실제 연산자는 인수 열에 지정된 테이블에서 모든 행을 검색합니다.인수 열에 WHERE:() 술어가 나타나면 술어를 충족하는 행만 반환됩니다.

테이블 스캔은 테이블의 모든 행을 검사해야 합니다.클러스터된 인덱스 검사는 인덱스만 검사하면 됩니다.테이블의 모든 레코드를 스캔하지는 않습니다.그것이 바로 지수의 요점입니다.

언급URL : https://stackoverflow.com/questions/18764/whats-the-difference-between-a-table-scan-and-a-clustered-index-scan

반응형