요구사항: GUID를 주 키 집계 인덱스로 사용할 때는 순서가 있는 GUID를 사용하는 것이 권장되는데, 이는 공간 낭비와 읽기 및 쓰기 효율 저하를 초래하기 때문입니다.
복습:
데이터베이스 GUID 값
SQL Server의 전역 고유 식별자(GUID) 데이터 타입은 데이터 타입으로 표현됩니다고유식별자, 16바이트 이진 값을 저장합니다. GUID는 여러 사이트에 컴퓨터가 있는 네트워크에서 고유해야 하는 식별자로서 주된 목적을 가진 이진 숫자입니다.
Guid와 SqlGuid 모두 서로 다른 GUID 값을 비교할 수 있는 방법이 있습니다. SqlGuid 구현은 SQL Server 동작을 사용합니다.값의 마지막 6바이트가 가장 중요합니다。
순차적 GUID는 본질적으로 추측 가능하므로 보안에 민감한 상황에서는 사용하지 마세요。
참조:하이퍼링크 로그인이 보입니다.
데이터베이스는 GUID에 따라 정렬됩니다
SQL Server 데이터베이스에는 하나가 있습니다NewSequentialId()함수를 통해 순서가 정해진 GUID를 생성합니다. 테이블을 만들 때는 GUID 타입 필드의 기본값으로 설정할 수 있고, 새 데이터를 삽입할 때 기본 키 값을 자동으로 생성할 수 있습니다(이 함수는 필드의 기본값으로만 사용할 수 있으며, SQL에서는 직접 호출할 수 없습니다).
본보기:
NewSequentialId() 함수는 데이터베이스에서만 사용할 수 있지만, Microsoft의 MSDN 문서에는 NEWSEQUENTIALID가 Windows UuidCreateSequential 함수의 래퍼라고 명시되어 있습니다.
팁: 기밀 유지가 문제라면 이 기능을 사용하지 마세요. 왜냐하면다음에 생성되는 GUID의 값을 추측하는 것도 가능합니다해당 GUID와 연관된 데이터에 접근하기 위해서입니다.
참조:하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
.NET은 순서가 정해진 GUID를 생성합니다
UuidCreateSequential 함수는 메서드의 컴퓨팅 하드웨어에 따라 다릅니다마지막 12비트는 네트워크 카드의 MAC 주소입니다。
코드는 다음과 같습니다:
결과는 다음과 같습니다:
결점:
- 이 메서드는 Windows 라이브러리를 호출하려면 DllImport가 필요하므로 크로스 플랫폼이 아닙니다.
- 여러 대의 컴퓨터가 같은 데이터베이스에 기록하는 클러스터 환경에서는 사용할 수 없는데, 이는 결과된 GUID가 서로 다르기 때문(함수 의존형 컴퓨팅 하드웨어)하여 인덱스 단편화가 발생하기 때문입니다.
- Windows 서버가 재시작되면 GUID가 낮은 범위에서 시작되어 인덱스 단편화가 발생할 수 있습니다.
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
.NET 프로그램을 사용해 SQL SERVER 순서로 GUID를 만들 경우, 서드파티 클래스 라이브러리를 사용하는 것이 권장됩니다:RT. 빗, nuget 명령어는 다음과 같습니다:
코드는 다음과 같습니다:
출력:
참조:하이퍼링크 로그인이 보입니다.
순서가 있는 GUID 기본 키 인덱스 조각
다음 스크립트로 두 개의 테이블을 생성하는 것부터 시작하세요:
이 테스트는 100,000개의 데이터를 삽입하며, 코드는 다음과 같습니다:
검사 결과는 다음과 같습니다:
| 가이드 | 시간 소모 (ms) | 스캔 밀도 [최고 수: 실제 수], 값이 높을수록 좋습니다 | 논리적 스캔 단편화, 값이 낮을수록 더 좋습니다 | 평균 페이지 밀도 (전체) (평균) 페이지 밀도(전체 포함)는 값이 높을수록 좋습니다 | | 순서가 없는 GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | GUID 순서 | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
테스트는 다시 100만 개의 데이터를 삽입하며, 순서가 뒤섞인 GUID는 135203 ms, 서열된 GUID는 135134 ms가 소요됩니다. 저장 공간 점유 비율은 다음과 같습니다:
순서 미정 GUID: 36.547 MB 주문 GUID: 26.609 MB
참조:하이퍼링크 로그인이 보입니다.
(끝)
|