[SQL] 클러스터 인덱스의 성능 향상은 기본 키를 GUID
SQL클러스터 인덱스의 성능 향상은 기본 키를 GUID
나는 행 많은 수의 (10K +)와 테이블을했습니다 그리고 기본 키는 GUID입니다. 기본 키는 클러스터됩니다. 쿼리 성능이 테이블에 매우 낮다. 이 효율적으로 만드는 제안을 주시기 바랍니다.
해결법
-
==============================
1.대신 여기 NEWID 그리고 NEWSEQUENTIALID 사이에 몇 가지 간단한 코드로 보여 차이를 참조) (NEWSEQUENTIALID를 사용할 필요가
대신 여기 NEWID 그리고 NEWSEQUENTIALID 사이에 몇 가지 간단한 코드로 보여 차이를 참조) (NEWSEQUENTIALID를 사용할 필요가
-
==============================
2.GUID에 클러스터 된 인덱스는 좋은 디자인이 아니다. GUID의 본질은, 임의 점입니다 클러스터 된 인덱스는 물리적으로 주문 키에 의해 레코드를하면서. 두 가지 가능성에서 완전히 있습니다. 모든 삽입을 위해 SQL은 디스크에 기록을 다시 정렬 할 수있다! 이 인덱스에서 클러스터링 제거!
GUID에 클러스터 된 인덱스는 좋은 디자인이 아니다. GUID의 본질은, 임의 점입니다 클러스터 된 인덱스는 물리적으로 주문 키에 의해 레코드를하면서. 두 가지 가능성에서 완전히 있습니다. 모든 삽입을 위해 SQL은 디스크에 기록을 다시 정렬 할 수있다! 이 인덱스에서 클러스터링 제거!
당신이 데이터에 "자연"순서가있을 때 사용하는 클러스터링에 시간이 : 시간 필드의 등을 삽입 시간, 계좌 번호, 클러스터링은 거의 무료입니다. (계좌 번호가 순차적으로 할당하는 경우) 계좌 번호의 경우, 무료 또는 저렴 수 있습니다.
GUID를 문제의 주위에 기술적 인 방법이 될 수 있지만, 가장 좋은 아이디어는 클러스터링을 사용할시기를 이해하는 것입니다.
-
==============================
3.기본 키로 GUID를 사용하여 아무 문제가 없습니다. 그냥 당신이 실제로 설정할 때 GUID는 기본 키가 다음 자동 유형의 클러스터되지 않은 것으로 만들고 인덱스를 설정할 수 있는지 확인하십시오. 많은 사람들이 SQL 서버에서이 작업을 수행하는 (또는 청춘의 노하우를) 잊는다.
기본 키로 GUID를 사용하여 아무 문제가 없습니다. 그냥 당신이 실제로 설정할 때 GUID는 기본 키가 다음 자동 유형의 클러스터되지 않은 것으로 만들고 인덱스를 설정할 수 있는지 확인하십시오. 많은 사람들이 SQL 서버에서이 작업을 수행하는 (또는 청춘의 노하우를) 잊는다.
GUID를에 클러스터 된 인덱스를 사용하지 마십시오. 이것은 분명히 무의미 디스크에있는 GUID, 주변의 물리적 순서가 발생합니다 (다른 사람이 이미 지적대로)
-
==============================
4.당신은 인덱스가 더 효과적인 것 순차적 GUID를 시도 할 수 있습니다. 여기에 정보.
당신은 인덱스가 더 효과적인 것 순차적 GUID를 시도 할 수 있습니다. 여기에 정보.
-
==============================
5.당신은 당신의 쿼리를 분석 할 필요가있다. 쿼리가 (당신이 SQL Server 또는 Oracle에서 쉽게 조용한를 얻을 수 있습니다) 실행 계획을 표시하지 않고 심하게 수행 왜 우리는 단지 추측 할 수있다.
당신은 당신의 쿼리를 분석 할 필요가있다. 쿼리가 (당신이 SQL Server 또는 Oracle에서 쉽게 조용한를 얻을 수 있습니다) 실행 계획을 표시하지 않고 심하게 수행 왜 우리는 단지 추측 할 수있다.
(원료 저장된 경우) GUID가 128 비트 값 인 것을 고려하여 GUID 컷 (기본 키 인덱스의 경우) (50)만큼 %까지 데이터와 인덱스 블록의 밀도는 확신 GUID가 적절하게.
그러나 힘은 문제가되지 않을 것을, 그래서 쿼리 계획을 검토합니다. 그것은 여러 가지 다른 문제가있을 수 있습니다.
-
==============================
6.lenghty 문자열 열에 대한 클러스터 된 인덱스를 생성하지 않도록하십시오. GUID는 36 문자있을 것이다. 심지어 당신이 클러스터 된 인덱스로 생성 한 쿼리 성능이 저하됩니다. ID 열 정수 더 연습 사용합니다.
lenghty 문자열 열에 대한 클러스터 된 인덱스를 생성하지 않도록하십시오. GUID는 36 문자있을 것이다. 심지어 당신이 클러스터 된 인덱스로 생성 한 쿼리 성능이 저하됩니다. ID 열 정수 더 연습 사용합니다.
from https://stackoverflow.com/questions/583001/improving-performance-of-cluster-index-guid-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 연결 연산자 (0) | 2020.05.04 |
---|---|
[SQL] 어떻게 PostgreSQL의 ORDER BY 절에서 별칭을 사용 하는가? (0) | 2020.05.04 |
[SQL] Microsoft Access를 사용하여 쿼리 결과에서 행 번호 (0) | 2020.05.04 |
[SQL] 쿼리 날짜 식 느린 실행되지만 빠른 문자열 리터럴로 (0) | 2020.05.04 |
[SQL] SQL 서버 (TSQL) -이 병렬로 EXEC 문에 수 있습니까? (0) | 2020.05.04 |