이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 3914|회답: 3

[출처] [MSSQL] SQL SERVER는 GUID와 순서가 없는 GUID를 주 키 집계 인덱스 테스트로 사용했습니다

[링크 복사]
게시됨 2023. 6. 8. 오후 9:12:26 | | | |
요구사항: GUID를 주 키 집계 인덱스로 사용할 때는 순서가 있는 GUID를 사용하는 것이 권장되는데, 이는 공간 낭비와 읽기 및 쓰기 효율 저하를 초래하기 때문입니다.

복습:

SQL Server 성능 최적화 인덱스 단편화
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server 데이터베이스의 int 및 guid를 기본 키 비교를 위해
https://www.itsvse.com/thread-10605-1-1.html

데이터베이스 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 1336712.58% [61:485]98.97%63.66%
GUID 순서 14139100.00% [39:39]0.32%99.61%





테스트는 다시 100만 개의 데이터를 삽입하며, 순서가 뒤섞인 GUID는 135203 ms, 서열된 GUID는 135134 ms가 소요됩니다. 저장 공간 점유 비율은 다음과 같습니다:

순서 미정 GUID: 36.547 MB
주문 GUID: 26.609 MB



참조:하이퍼링크 로그인이 보입니다.


(끝)




이전의:.NET 코어 프로그램 다국어 읽기 및 쓰기 리소스(.resx) 파일
다음:.NET/C# 스트림 리드 디스크 파일 메모리 최적화
 집주인| 게시됨 2024. 1. 27. 오전 11:07:12 |
ABP는 SQL 서버 데이터베이스를 위한 순서화된 GUID를 생성하며, 소스 코드는 다음과 같습니다:



 집주인| 게시됨 2024. 3. 24. 오전 11:43:45 |
EF 코어는 순서가 정해진 GUID 코드를 생성합니다:





하이퍼링크 로그인이 보입니다.

 집주인| 게시됨 2024. 4. 11. 오후 3:00:11 |
MySQL은 순서가 정해진 GUID를 생성합니다:하이퍼링크 로그인이 보입니다.



면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com