클러스터형 인덱스를 비활성화하면 왜 테이블에 액세스 할 수 없습니까?


11

인덱스가 비활성화되면 정의는 시스템 카탈로그에 남아 있지만 더 이상 사용되지 않습니다. SQL Server는 테이블의 데이터가 변경 될 때 인덱스를 유지 관리하지 않으며 쿼리를 만족시키기 위해 인덱스를 사용할 수 없습니다. 경우 클러스터 된 인덱스가 비활성화되어 전체 테이블에 액세스 할 수 없게됩니다.

B- 트리를 버리고 테이블에서 직접 데이터에 액세스 할 수없는 이유는 무엇입니까? (행별로 테이블을 스캔하여) 데이터에 완전히 액세스 할 수 없게 만드는 것보다 더 적합하지 않습니까?

순전히 이론적 인 질문입니다. 실제로 그렇게하지는 않을 것입니다. 시나리오가 아니고해야 할 일이 아닙니다. 왜 그런 식으로 진행되는지 알고 싶습니다. 내부 질문입니다.

답변:


10

B- 트리를 버리는 테이블에서 직접 데이터에 액세스 할 수없는 이유는 무엇입니까? (대부분의 테이블을 한 줄씩 스캔하면) 액세스 할 수없는 데이터보다 더 적합하지 않습니까?

귀하의 질문에 대답하기 위해 색인 작성 기본 사항이 더 편리합니다. 색인은 B- 트리 구조로 구성된 일련의 페이지 (인덱스 노드)로 구성됩니다. 이 구조는 본질적으로 계층 구조이며 최상위에는 루트 노드가 있고 아래쪽에는 리프 노드가 있습니다. 자세한 내용은 여기를 참조 하십시오 .

또한 많은 사람들이 설명했듯이 Clustered Indexes == 하나 이상의 키 또는 열로 물리적으로 정렬 된 원본 테이블. 따라서 클러스터형 인덱스가 비활성화되면 해당 데이터 행에 액세스 할 수 없습니다. 비 클러스터형 인덱스의 경우 삽입이 성공하지만이 게시물과 관련이있는 것은 아니지만 여기서는 클러스터형 인덱스에 대한 설명과 같이 데이터를 삽입 할 수 없거나 재구성 작업이 작동하지 않습니다.

아래에 자세히 설명되어 있습니다.

Clustered Index 를 비활성화 한 결과를 확인하기 위해 Adventureworks 데이터베이스를 사용합니다 .

여기에 이미지 설명을 입력하십시오

이제 테이블에서 행 개수를 확인하십시오.

여기에 이미지 설명을 입력하십시오

이제 클러스터형 인덱스를 비활성화하십시오

여기에 이미지 설명을 입력하십시오

이제 테이블에서 행 개수를 선택하십시오. 이번에는 아래 메시지와 함께 오류가 발생합니다.

여기에 이미지 설명을 입력하십시오

재구성 작업조차도 작동하지 않습니다 !!

여기에 이미지 설명을 입력하십시오

이제 Clustered Index를 다시 작성하면 정상적으로 작동합니다.

여기에 이미지 설명을 입력하십시오

데이터에 액세스 할 수 있는지 확인하려면 표를 선택하십시오.

여기에 이미지 설명을 입력하십시오

결론적으로, 클러스터형 인덱스를 비활성화하면 테이블의 데이터는 여전히 존재하지만 Drop 또는 REBUILD 작업 외에는 액세스 할 수 없습니다. 관련된 모든 비 클러스터형 인덱스 및 뷰는 사용할 수 없으며 테이블을 참조하는 외래 키는 비활성화되며 테이블을 참조하는 모든 쿼리에 대해 FAILURE가 발생합니다.

참고 : 색인을 활성화 할 수있는 옵션이 없습니다. 리빌드해야합니다.


2

는 B + 트리의 잎 수준 이다 테이블. CI를 비활성화하여 달성하고자하는 것은 무엇입니까? 데이터에 액세스 할 수 없도록하려면이 작업을 수행하지 마십시오.

SQL Server가 왜 그렇게 할 수 있는지 잘 모르겠습니다.

CREATE TABLE T
(
    X INT CONSTRAINT PK PRIMARY KEY CLUSTERED, 
    Y INT CONSTRAINT UQ UNIQUE NONCLUSTERED
);

ALTER INDEX PK ON T DISABLE;

... 또한 NCI를 비활성화하므로 SELECT해당 쿼리로 처리되는 쿼리도 비활성화됩니다. 나는 이것에 대한 유스 케이스를 생각할 수 없다. - 마틴 스미스

내가 생각할 수있는 유일한 것은 논의중인 것입니다. 테이블 비활성화 다른 사람이, dbo또는을 터치하지 않게하려는 테이블이 있으면 sysadmin클러스터형 인덱스를 비활성화 할 수 있습니다. 테이블은 데이터와 함께 존재하지만 클러스터형 인덱스를 다시 활성화 할 때까지 완전히 액세스 할 수 없습니다. - 케네스 피셔

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.