클러스터형 인덱스는 고유해야합니까?
클러스터형 인덱스가 고유하지 않으면 어떻게됩니까? 삽입 된 행이 일종의 "오버플로"페이지로 이동하기 때문에 성능이 저하 될 수 있습니까?
고유 한 "만들기"입니까? 그렇다면 어떻게해야합니까? 고유하게 만드는 가장 좋은 방법은 무엇입니까?
현재 클러스터형 인덱스를 사용하여 테이블을 논리적 부분으로 나누고 있기 때문에 질문하고 있지만 성능은 그저 그렇고 최근에는 클러스터형 인덱스를 고유하게 만드는 조언 을 받았습니다 . 그것에 대한 두 번째 의견이 필요합니다.
감사!
독특 할 필요 는 없지만 확실히 권장됩니다.
고유하지 않은 열에 CI를 생성하려는 시나리오는 아직 발생하지 않았습니다.
고유하지 않은 열에 CI 를 생성 하면 어떻게 되나요?
클러스터형 인덱스가 고유 인덱스가 아닌 경우 SQL Server는 고유 자라는 내부 생성 값을 추가하여 중복 키를 고유하게 만듭니다.
이로 인해 성능이 저하됩니까?
고유자를 추가하면 계산 및 저장에 약간의 오버 헤드가 추가됩니다.
이 오버 헤드가 눈에 띄는 지 여부는 여러 요인에 따라 다릅니다.
- 테이블에 포함 된 데이터의 양.
- 삽입 비율은 얼마입니까?
- 선택에서 CI가 사용되는 빈도입니다 (포함 인덱스가없는 경우 거의 항상).
Remus가 의견에서 지적한대로 편집 하면 고유하지 않은 CI를 만드는 것이 합리적인 선택이 될 수있는 사용 사례가 있습니다. 그러한 시나리오 중 하나를 만나지 않은 나는 단지 내 자신의 노출이나 능력이 부족하다는 것을 보여줄뿐입니다 (선택을 선택하십시오).
인덱싱의 여왕 Kimberly Tripp이이 주제에 대해 뭐라고 말했는지 확인하고 싶습니다.
몇 가지 이유로 클러스터링 키에 대한 권장 사항부터 시작하겠습니다. 첫째, 쉬운 결정이고 둘째,이 결정을 일찍 내리면 일부 유형의 조각화를 사전에 방지하는 데 도움이됩니다. 특정 유형의 기본 테이블 조각화를 방지 할 수있는 경우 일부 유지 관리 작업을 최소화 할 수 있습니다 (일부는 SQL Server 2000에서, 그 중 일부는 SQL Server 2005에서 필요). 좋아, 나중에 재 구축에 대해 알아볼 게 .....
클러스터링 키에서 찾은 주요 사항부터 시작하겠습니다.
* Unique
* Narrow
* Static
왜 독특한가?클러스터링 키 (존재하는 경우)가 모든 비 클러스터형 인덱스의 조회 키로 사용되므로 클러스터링 키는 고유해야합니다. 예를 들어 책 뒷면의 색인을 살펴 보겠습니다. 색인 항목이 가리키는 데이터를 찾아야하는 경우 해당 항목 (색인 항목)은 고유해야합니다. 그렇지 않은 경우에는 어떤 색인 항목이 찾고 있는지 확인합니다. ? 따라서 클러스터형 인덱스를 만들 때 고유해야합니다. 그러나 SQL Server에서는 고유 한 열에 클러스터링 키를 만들 필요가 없습니다. 원하는 열에 만들 수 있습니다. 내부적으로 클러스터링 키가 고유하지 않은 경우 SQL Server는 데이터에 4 바이트 정수를 추가하여이를 "고유 화"합니다. 따라서 클러스터형 인덱스가 고유하지 않은 항목에 생성되면 인덱스 생성시 추가 오버 헤드가있을뿐만 아니라 낭비되는 디스크 공간이 있습니다.
출처 : 지속적으로 증가하는 클러스터링 핵심 논쟁-다시!
클러스터형 인덱스는 고유해야합니까?
그렇지 않으며 그렇지 않은 경우 더 나은 때가 있습니다.
세미 랜덤, 고유 EmployeeId 및 각 직원에 대한 DepartmentId가있는 테이블을 고려하십시오. select 문이 다음과 같은 경우
SELECT * FROM EmployeeTable WHERE DepartmentId=%DepartmentValue%
그러면 DepartmentId
고유 인덱스가 아니더라도 (또는 특히) 클러스터형 인덱스 인 경우 성능에 가장 좋습니다 (주어진 DepartmentId 내의 모든 레코드가 클러스터링되도록하기 때문에 성능에 가장 적합합니다).
참고 문헌이 있습니까?
거기에 클러스터 된 인덱스 디자인 지침 말한다 예는,
몇 가지 예외를 제외하고 모든 테이블에는 다음을 제공하는 열에 정의 된 클러스터형 인덱스가 있어야합니다.
- 자주 사용하는 쿼리에 사용할 수 있습니다.
- 높은 수준의 고유성을 제공합니다.
- 범위 쿼리에 사용할 수 있습니다.
예를 들어 "높은 수준의 고유성"에 대한 나의 이해는 대부분의 쿼리가 주어진 도시 내의 레코드를 선택하려는 경우 클러스터 된 인덱스로 "국가"를 선택하는 것이 좋지 않다는 것입니다.
참고 URL : https://stackoverflow.com/questions/4332982/do-clustered-indexes-have-to-be-unique
'program tip' 카테고리의 다른 글
"text-align : justify;"를 사용하지 않아야합니까? (0) | 2020.10.17 |
---|---|
JavaScript에서 현재 줄 번호를 어떻게 확인할 수 있습니까? (0) | 2020.10.17 |
Git-메서드 / 함수의 변경 내역을 보려면 어떻게해야합니까? (0) | 2020.10.17 |
PostgreSQL에서 두 데이터베이스 간의 데이터를 비교하는 방법은 무엇입니까? (0) | 2020.10.17 |
auto_ptr은 더 이상 사용되지 않습니까? (0) | 2020.10.17 |