문제

나는 SQL Server Performace에 상당히 정통하지만 Constanly는 Guid가 Clusterd 기본 키의 기본 유형으로 사용되어야한다는 아이디어를 내려야합니다.

테이블의 하루에 상당히 많은 양의 인서트가 있다고 가정하면 (5000 +/- 행 / 일), 어떤 종류의 공연 문제를 해결할 수 있습니까? 페이지 분할이 우리의 추천 성능에 어떤 영향을 미칩니 까? 얼마나 자주 다시 구매해야합니까 (또는 훼손되어야합니까)? 채우기 요소를 (100, 90, 80, ECT)로 설정해야합니까?

하루에 1,000,000 행을 삽입한다면 어떻게해야합니까?

모든 질문에 대해 사과드립니다. 그러나 PKS의 기본값으로 Guid를 사용하지 않기 위해 백업을 받으려고합니다. 그러나 나는 stackoverflow 사용자 기반의 과도한 지식에 의해 내 마음을 바꾸는 데 완전히 열려 있습니다.

도움이 되었습니까?

해결책

당신이 어떤 종류의 책을하고 있다면, 당신이 사용하지 않는 한, 안내는 PK 나쁜 것처럼 매우 나쁘다. 순차적 인지도, 정확한 이유 때문에 설명합니다. 페이지 조각화는 심각합니다:

                 Average                    Average
                 Fragmentation  Fragment    Fragment   Page     Average 
Type             in Percent     Count       Size       Count    Space Used

id               4.35           7           16.43      115      99.89
newidguid        98.77          162         1          162      70.90 
newsequentualid  4.35           7           16.43      115      99.89

그리고 AS 이 비교 안내서와 정수 사이에 표시 :

Test1은 엄청난 양의 페이지 분할을 일으켰고 주변에 스캔 밀도가있었습니다. 12% 인서트가 완료된 후 DBCC Showcontig를 실행했을 때. Test2 테이블은 스캔 밀도가 약 98%를 가졌습니다.

그러나 볼륨이 매우 낮 으면 그다지 중요하지 않습니다.

전 세계적으로 고유 한 ID가 필요하지만 대량 (및 순차 ID를 사용할 수 없음)이 필요하다면 Guids를 색인 된 열에 넣으십시오.

다른 팁

기본 키로 Guid를 사용하는 단점 :

  • 의미있는 주문이 없음, 색인이 정수와 마찬가지로 성능 향상을 제공하지 않습니다.
  • 정수의 경우 2, 4 또는 8 바이트 대 Guid 16 바이트의 크기.
  • 인간이 기억하기가 매우 어렵 기 때문에 참조 ID로는 좋지 않습니다.

장점 :

  • 웹 페이지 쿼리 문자열이나 응용 프로그램에 표시 될 때 덜 위험 할 수있는 추측 불가능한 기본 키를 허용하십시오.
  • 자동 증분 또는 ID 데이터 유형을 제공하지 않는 데이터베이스에 유용합니다.
  • 플랫폼이나 환경에서 두 가지 다른 데이터 소스간에 데이터를 결합해야 할 때 유용합니다.

안내서를 사용할지 여부에 대한 결정은 매우 간단하다고 생각했지만 다른 문제를 알지 못할 수도 있습니다.

하루에 낮은 인서트가 있으면 페이지 분할이 중요한 요소가되어야한다고 의심합니다. 실제 질문은 5,000이 기존 행 카운트와 어떻게 비교 되는가입니다. 이것은 Deffer 스플릿에 적절한 초기 충전 계수를 결정하는 데 필요한 주요 정보이기 때문입니다.

이것은 개인적으로지도의 큰 팬이 아닙니다. 나는 그들이 어떤 맥락에서 잘 섬길 수 있다는 것을 이해하지만, 많은 경우에 그들은 단지 효율성, 사용 편의성, ...

나는 Guid를 사용해야하는지 여부를 결정하는 데 좁히는 데 유용한 다음 질문을 발견했습니다.

  • PK는 공유/게시됩니까? (즉, SQL 내의 내부 사용을 넘어서 사용되며 응용 프로그램에는 이러한 키를 다소 지속적으로 필요로합니까? 사용자는 어떻게 든 이러한 키를 볼 수 있습니까?
  • PK가 이질적인 데이터 소스를 병합하는 데 도움이 될 수 있습니까?
  • 테이블에는 데이터의 열에서 만들어진 기본 복합재가 있습니까? 이 열쇠의 크기는 얼마입니까?
  • 기본 키는 어떻게 정렬됩니까? 복합이라면 처음 몇 개의 열이 선택적입니까?

클러스터 된 인덱스가 삽입 성능을 제거 할 수 있으므로 안내서 (순차적 인 GID가 아닌 한)를 사용합니다. 물리적 테이블 레이아웃은 클러스터 된 인덱스에 따라 정렬되므로 임의의 시퀀싱 순서를 갖는 GUID를 사용하면 심각한 테이블 조각화가 발생합니다. Guid를 PK/Clustered Index로 사용하려면 SQL Server의 NewSeverentialD () 함수를 사용하여 순차적 인 GUID 여야합니다. 이를 통해 생성 된 안내서는 순차적으로 주문되고 단편화를 방지 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top