a clustered
와 a 의 차이점은 무엇입니까 non-clustered index
?
a clustered
와 a 의 차이점은 무엇입니까 non-clustered index
?
답변:
클러스터형 인덱스
비 클러스터형 인덱스
인덱스를 사용하는 필드가있는 데이터를 선택할 때 두 가지 인덱스 유형 모두 성능이 향상되지만 업데이트 및 삽입 작업 속도가 느려집니다.
삽입 및 업데이트 속도가 느리기 때문에 일반적으로 Id 또는 Timestamp와 같이 증분 필드에 클러스터형 인덱스를 설정해야합니다.
SQL Server는 선택성이 95 %를 초과하는 경우에만 인덱스를 사용합니다.
클러스터형 인덱스는 디스크의 데이터를 물리적으로 정렬합니다. 이는 인덱스에 추가 데이터가 필요하지 않지만 클러스터 된 인덱스는 하나만있을 수 있음을 의미합니다. 클러스터형 인덱스를 사용하여 데이터에 액세스하는 것이 가장 빠릅니다.
다른 모든 인덱스는 클러스터되지 않아야합니다. 비 클러스터형 인덱스에는 인덱스 된 열의 데이터 복제본이 실제 데이터 행에 대한 포인터와 함께 순서대로 유지됩니다 (클러스터형 인덱스가있는 경우 이에 대한 포인터). 즉, 비 클러스터형 인덱스를 통해 데이터에 액세스하려면 추가 간접 계층이 필요합니다. 그러나 인덱싱 된 열에서 사용할 수있는 데이터 만 선택하면 복제 된 인덱스 데이터에서 직접 데이터를 다시 가져올 수 있습니다 (따라서 * 필요하지 않은 열만 선택하는 것이 좋습니다).
클러스터형 인덱스는 실제로 테이블에 저장됩니다. 이는 가장 빠르며 테이블 당 하나의 클러스터형 인덱스 만 가질 수 있음을 의미합니다.
비 클러스터형 인덱스는 별도로 저장되며 원하는만큼 가질 수 있습니다.
가장 좋은 옵션은 가장 많이 사용되는 고유 열 (일반적으로 PK)에 클러스터형 인덱스를 설정하는 것입니다. 매우 강력한 이유는 하나의 생각할 수는 없지만, 그렇지 않을 수도 있습니다. 그렇지 않은 경우에는 그렇지 않을 수도 있습니다.
이러한 차이점을 제외하고는 테이블이 클러스터되지 않은 경우 (테이블에 클러스터 된 인덱스가없는 경우) 데이터 파일이 정렬되지 않고 데이터 구조로 힙 데이터 구조를 사용합니다.
인덱싱 된 데이터베이스에는 임의의 순서로 배열 된 실제 레코드 세트와 일부 기준으로 정렬 된 결과를 산출하기 위해 레코드를 읽어야하는 순서를 식별하는 인덱스 세트의 두 부분이 있습니다. 물리적 배열과 인덱스간에 상관 관계가없는 경우 모든 레코드를 순서대로 읽으려면 많은 독립적 인 단일 레코드 읽기 작업이 필요할 수 있습니다. 데이터베이스가 두 개의 비 연속 레코드를 읽는 데 걸리는 시간보다 적은 시간에 수십 개의 연속 레코드를 읽을 수 있으므로 인덱스에서 연속 된 레코드도 디스크에 연속적으로 저장되는 경우 성능이 향상 될 수 있습니다.
예를 들어 빈 클러스터되지 않은 데이터베이스로 시작하여 10,000 개의 레코드를 임의 순서로 추가하는 경우 레코드가 추가 된 순서대로 끝에 추가 될 수 있습니다. 인덱스 순서대로 데이터베이스를 읽으려면 10,000 개의 1 레코드 읽기가 필요합니다. 그러나 클러스터 된 데이터베이스를 사용하는 경우 시스템은 각 레코드를 추가 할 때 이전 레코드가 저절로 저 장되었는지 여부를 확인할 수 있습니다. 해당되는 경우 데이터베이스 끝에 새 레코드를 사용하여 해당 레코드를 쓸 수 있습니다. 그런 다음 이동 된 레코드가 상주했던 슬롯 이전의 실제 레코드를보고 그 뒤의 레코드가 저절로 저장되었는지 확인할 수 있습니다. 그것이 사실이라면, 그 기록을 그 자리로 옮길 수 있습니다. 이러한 접근 방식을 사용하면 많은 레코드가 쌍으로 함께 그룹화됩니다.
실제로 클러스터 된 데이터베이스는 이보다 더 정교한 알고리즘을 사용합니다. 그러나 데이터베이스를 업데이트하는 데 걸리는 시간과 순차적으로 읽는 데 걸리는 시간 사이에는 트레이드 오프가 있습니다. 클러스터 된 데이터베이스를 유지 관리하면 정렬 순서에 영향을 줄 수있는 방식으로 레코드를 추가, 제거 또는 업데이트하는 데 필요한 작업량이 크게 증가합니다. 데이터베이스가 업데이트되는 것보다 훨씬 자주 순차적으로 읽 히면 클러스터링이 큰 승리가 될 수 있습니다. 자주 업데이트되지만 순서대로 읽기가 거의 불가능한 경우, 특히 데이터베이스에 항목을 추가하는 순서가 클러스터 된 인덱스와 관련하여 정렬 순서와 무관 한 경우 클러스터링이 성능을 크게 저하시킬 수 있습니다.
위의 게시물에서 이론 부분을 살펴 보았을 것입니다.
-클러스터형 인덱스는 포인트를 직접 기록 할 수 있으므로 직접 검색 할 수 있으므로 검색 시간이 단축됩니다. 또한 인덱스를 저장하는 데 추가 메모리 / 공간이 필요하지 않습니다.
비 클러스터형 인덱스에서는 클러스터 된 인덱스를 간접적으로 가리킨 다음 실제 레코드에 액세스합니다. 간접적 인 특성으로 인해 액세스하는 데 시간이 좀 더 걸릴 수 있습니다. 인덱스
// 비 클러스터형 인덱스의 두 번째 포인트는 MSDN에서 복사 한 것으로 다른 답변에서는 명확하게 언급되지 않았습니다.
클러스터
비 클러스터