문제

기본 UUID/Guid 데이터 유형이없는 데이터베이스에 UUID/Guid를 저장하는 가장 효율적인 데이터 유형은 무엇입니까? 2 bigints?

그리고 안내서에서 해당 유형으로 전환하는 가장 효율적인 코드 (C# 선호)는 무엇입니까?

감사.

도움이 되었습니까?

해결책

사용중인 데이터베이스를 알지 못하고 가장 효율적인 것이 무엇인지 말하기는 어렵습니다.

나의 첫 번째 성향은 a를 사용하는 것입니다 binary(16) 열.

C#에서 그 값을 사용하는 것에 관해서는 System.Guid 유형은 a를 수락하는 생성자가 있습니다 byte[] 배열 및 방법 ToByteArray() 바이트 배열을 반환합니다.

다른 팁

내 경험상, UUID는 두 개의 정수로 분류되는 것이 숯 필드를 사용하는 것보다 여전히 더 효율적입니다. 다른 DBS는 다른 방식으로 반응합니다. 콜라이트도 거기에서 변화를 만들 수 있습니다. 즉, 응용 프로그램 전체에서 일반적으로 훨씬 더 큰 성능 "죄"가 있으며, 이것이 많은 응용 프로그램에서 어느 쪽이든 중요한 일이라고 생각하지 않습니다. 이 앱 의이 부분이 얼마나 바쁠 지에 따라 자신을 판단해야합니까? UUID에 의해 가장 빠른 쿼리가 필요합니까? 600ns vs 400NS는 당신에게 큰 시간 차이가 있습니까?

DB와 함께 많은 수동 SQL Doen이있을 경우, 삽입을 수행해야 할 때 별도의 필드 종류의 악취로 구성된 키가 포함 된 키가 있고 DB 기본값이 없습니다. 그것은 또한 숯의 문제이기도합니다.

데이터베이스 추상화 계층이있는 경우 여러 테이블 필드를 결합하여 UUID를 얻는 것이 큰 문제가되지 않아야합니다.

보고 .NET Guid 클래스, GUID를 초기화하는 몇 가지 방법이 있습니다.

GUID (int32, int16, int16, byte, byte, byte, byte, byte, byte, byte, byte) guid (string)

이론적으로 정수를 데이터베이스에 저장하는 것이 더 효율적일 수 있지만 (비트 시프트를 사용하여 실제로 4 개의 32 비트 정수를 저장할 수 있습니다. 그러나 매번로드하고 저장할 때이를 계산해야합니다. 추가로 데이터베이스에서 4 개의 필드가 필요합니다. 나는 그것이 덜 효율적이라고 생각할 것입니다.

디버깅/테스트 목적으로 데이터베이스에서 직접 읽을 수 없을 정도로 추가하면 문자열을 저장하는 것이 가장 좋다고 핸즈 다운이라고 말합니다. 그것은 단지 32 자리 필드 (대시를 포함하는 경우 36) 일 뿐이며 변환하기가 매우 쉽습니다. 안내ToString () 그리고 새로운 GUID (StringValue);

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