SQL Server-클러스터형 인덱스와 비 클러스터형 인덱스는 언제 사용합니까?


99

클러스터형 인덱스와 비 클러스터형 인덱스의 주요 차이점을 알고 있으며 실제로 작동하는 방식을 이해하고 있습니다. 클러스터형 및 비 클러스터형 인덱스가 어떻게 읽기 성능을 향상시키는 지 이해합니다. 그러나 내가 확실하지 않은 한 가지는 내가 다른 하나를 선택하는 이유가 무엇인지입니다.

예 : 테이블에 클러스터형 인덱스가없는 경우 비 클러스터형 인덱스를 만들어야하며 수행 할 때의 이점은 무엇입니까?


3
응답 해 주셔서 감사합니다. 나는 이미 알고 있습니다. 제 질문은 클러스터되지 않은 인덱스를 생성하는 것이 클러스터형 인덱스를 생성하는 것보다 더 많은 이점을 얻을 수있는 상황이있을 것입니다
armulator

2
예, 다음과 같은 경우 클러스터형 인덱스를 피해야합니다. 열이 낮은 카디널리티, 특정 순서 없음, 자주 업데이트되고 비 순차적이며 많은 열의 합성입니다 ...
TI

답변 해 주셔서 감사합니다. 도움이되었습니다
armulator 2013-08-18

1
아마도이 질문에 당신을 도울 것입니다 : stackoverflow.com/questions/5070529/...
데이비드 가르시아 곤잘레스에게

답변:


117

경고의 말씀을 드리고 싶습니다. 클러스터형 인덱스를 신중하게 선택하십시오! 모든 "일반"데이터 테이블에는 클러스터형 인덱스가 있어야합니다. 클러스터형 인덱스를 사용하면 실제로 많은 작업 속도가 빨라지기 때문입니다. 예, 속도를 높이고 삽입 및 삭제도 가능합니다! 그러나 좋은 클러스터형 인덱스 를 선택하는 경우에만 가능합니다 .

그것은의 가장 복제 하여 SQL Server 데이터베이스에서 데이터 구조. 클러스터링 키는 테이블에있는 모든 비 클러스터형 인덱스의 일부이기도합니다.

클러스터링 키를 선택할 때는 매우주의해야합니다. 다음과 같아야합니다.

  • 좁음 (4 바이트 이상)

  • 고유합니다 (결국 "행 포인터"입니다. 고유하게 만들지 않으면 SQL Server가 백그라운드에서 자동으로 수행하므로 각 항목에 대해 몇 바이트에 행 수와 클러스터되지 않은 인덱스 수를 곱한 비용이 발생합니다) -이것은 매우 비쌀 수 있습니다!)

  • 정적 (변경하지 않음-가능한 경우)

  • 이상적으로는 계속 증가 하므로 끔찍한 인덱스 조각화로 끝나지 않습니다 (GUID는 특정 이유로 인해 좋은 클러스터링 키의 정반대입니다).

  • nullable이 아니어야하며 이상적으로는 너비가 고정되어야합니다. a varchar(250)는 클러스터링 키를 매우 열악하게 만듭니다.

다른 모든 것은이 점 뒤에있는 두 번째 및 세 번째 중요도 여야합니다.

주제에 대한 Kimberly Tripp ( 인덱싱의 여왕 ) 블로그 게시물 중 일부를 참조하십시오. 그녀가 블로그에 쓴 모든 것은 절대적으로 가치가 있습니다. 읽고, 소화하십시오.


1
명확한 설명에 대해 marc_s에게 감사드립니다. 하지만 기술적으로 말해서 non clustered인덱스는 우리에게 어떤 역할을 하나요? 그 중요성은 무엇입니까 ..?
hud

@nad : 잘 선택된 비 클러스터형 인덱스는 검색 속도를 높일 수 있습니다. 잠재적으로 수백만 행의 데이터를 검색 기준과 비교하는 대신 4, 5 개의 비교만으로 주어진 행을 찾을 수 있습니다. 그것은 엄청난 차이를 만듭니다 !
marc_s dec.

1
@MuriloKunze : 읽기 주제에 김 트립의 블로그 게시물 -이 경우 왜 그녀는 아주 자세하게 설명
marc_s가

5
죄송합니다. "SQL Server-클러스터형 인덱스와 비 클러스터형 인덱스를 사용하는시기"라는 질문에 대한 대답은 어디에 있습니까? ?
Eduard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.