복붙노트

[SQL] 테이블 스캔 및 클러스터 된 인덱스 스캔의 차이점은 무엇입니까?

SQL

테이블 스캔 및 클러스터 된 인덱스 스캔의 차이점은 무엇입니까?

테이블 스캔과 본질적으로 클러스터 된 인덱스 스캔 모두가 테이블에서 모든 레코드를 검색하기 때문에, 왜 가정으로 더 나은 클러스터 된 인덱스 스캔입니까?

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

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

해결법

  1. ==============================

    1.클러스터 된 인덱스 (힙 테이블)이없는 테이블에서 데이터 페이지가 서로 연결되지 않은 - 페이지를 통과하면 인덱스 할당지도로 조회가 필요하므로.

    클러스터 된 인덱스 (힙 테이블)이없는 테이블에서 데이터 페이지가 서로 연결되지 않은 - 페이지를 통과하면 인덱스 할당지도로 조회가 필요하므로.

    클러스터형 테이블은, 그러나, 그것의 데이터 페이지는 이중 연결리스트에 연결되어있다 - 약간 빠른 순차적 스캔을. 물론, 교환, 당신은 INSERT, UPDATE 및 DELETE에 위해 데이터 페이지를 유지하는 처리의 오버 헤드를 가지고있다. 힙 테이블은, 그러나, IAM에 두 번째 쓰기가 필요합니다.

    쿼리는 범위 연산자가있는 경우 (예 : 이드 1과 100 사이의 테이블에서 SELECT *), 다음 클러스터 테이블 (보장 된 순서에있는)이보다 효율적인 것 -는 관련 데이터를 찾기 위해 인덱스 페이지를 사용할 수 있습니다로 페이지 (들). 이 순서에 의존 할 수 없기 때문에 힙은 모든 행을 스캔해야합니다.

    그리고, 물론, 클러스터 된 인덱스가 성능을 거의 최적 인 당신이 클러스터 된 인덱스가 추구 할 수 있습니다 ... 아니 인덱스 힙은 항상 테이블 스캔을 초래할 것입니다.

    그래서:

    Microsoft는이 힙에 상응하는 클러스터되지 않은 인덱스 클러스터 된 인덱스를 비교하는 백서 (내가 위에서 언급하지만, 가깝게 동일하지 않음). 그들의 결론은 모든 테이블에 클러스터 된 인덱스를 넣어 기본적으로. 내가 (다시 그들이 진짜로 여기에 클러스터 된 인덱스 클러스터되지 않은 인덱스를 비교하고 있다는 메모를 -하지만 상대적으로 비교 생각) 그 결과를 요약하기 위해 최선을 다하겠습니다 :

  2. ==============================

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

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

    클러스터 된 인덱스 스캔 논리 및 물리 연산자는 Argument 열에 지정된 클러스터형 인덱스를 검색합니다. 옵션 WHERE :() 조건 술어를 충족 현재, 만 행이 반환됩니다. 인수 열이 ORDERED 절이 포함 된 경우 쿼리 프로세서는 행 '출력은 클러스터 된 인덱스를 분류 한 순서대로 반환 할 것을 요청했습니다. 순서화 절 없으면 스토리지 엔진 (소트 출력을 보장하지 않음)에 최적의 방법으로 인덱스를 검색한다.

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

    테이블 스캔 논리 및 물리 연산자는 인수 열에 지정된 테이블의 모든 행을 검색한다. 인수 열에서 WHERE :() 술어가 나타날 경우, 술어를 충족 행만 반환됩니다.

  3. ==============================

    3.테이블 스캔은 테이블의 모든 단일 행을 검사해야한다. 클러스터 된 인덱스 스캔은 인덱스를 스캔 할 필요가있다. 이 테이블의 모든 레코드를 검색하지 않습니다. 즉 인덱스, 정말 점입니다.

    테이블 스캔은 테이블의 모든 단일 행을 검사해야한다. 클러스터 된 인덱스 스캔은 인덱스를 스캔 할 필요가있다. 이 테이블의 모든 레코드를 검색하지 않습니다. 즉 인덱스, 정말 점입니다.

  4. from https://stackoverflow.com/questions/18764/whats-the-difference-between-a-table-scan-and-a-clustered-index-scan by cc-by-sa and MIT license