2017-12-25 42 views
-1

테이블 스캔은 정확히 어떻게 작동합니까? 여기 테이블 스캔 어떤 열을 선택합니까?

내가 아는 것입니다 :

  • 테이블 스캔은 전체 테이블을 검색합니다.
  • 클러스터 된 인덱스 검색은 해당 인덱스에 정의 된 열만 검색합니다.

은의 우리가이 시나리오가 척하자

table_a

열 : ID, 도시

나라

을 나는 City에 클러스터 된 인덱스가 있습니다. 이 시나리오에서는

  1. 테이블 만 city 열을 볼 스캔 것 또는이 ID, 도시를 확인합니다 :

    select city 
    from table_a 
    where city = 'austin' 
    

    실제 질문 :

    내가 실행 쿼리는 이것이다 및 국가 열.

  2. 테이블 스캔이 하나의 열만 검색하는 경우 테이블 스캔과 인덱스 스캔의 성능이 동일하다고 말하는 것이 안전합니까?

편집 1 부 :

Google 검색 쓴 :

테이블 스캔이 SQL 서버를 발생 메모리에 모든 행과 열을 읽습니다. 인덱스 스캔이 발생하면 모든 행과 인덱스의 컬럼 만 읽습니다.

+1

"클러스터 된 인덱스 검색은 해당 인덱스에 정의 된 열만 검색합니다." - 그건 틀렸어. 클러스터 된 인덱스 스캔은 테이블 스캔입니다. SQL Server에서 (단일) 클러스터 된 인덱스가 테이블이기 때문에 테이블의 모든 페이지를 방문합니다. 쿼리에 필요한 열만 검사하더라도 모든 페이지가 여전히 읽혀집니다. –

+0

이름이 같은 경우 왜 다른 이름을 사용합니까? 특정 시나리오에서만 동일한 것입니까? – LunchBox

+1

"왜 똑같 으면 서로 다른 이름을 갖고 있니?" - 아마도 Microsoft에 문의하십시오! 원래 테이블 스캔이라는 용어는 힙과 클러스터 된 테이블을 덮는 데 사용되었습니다. 나중에 용어가 분리되었습니다 (AFAIK). 하지만, 클러스터 된 인덱스 스캔 == 테이블 스캔. –

답변

0

실행 계획을 살펴보십시오. 지정된 City가있는 행만이 만지도록 클러스터 된 인덱스 찾기를 기대합니다. 색인화되지 않은 열을 검색하면 클러스터 된 색인 스캔이 수행되어 모든 행을 건 드리지 만 규정 된 행만 리턴됩니다.

쿼리에서 필요한 열만 행에서 추출되며 관련이없는 열은 검색 또는 검색 작업 중에 검사되지 않습니다.