나는 이유를 사용하는 주위를 읽거나하지 존재 한 Guid
과 int
.
int
작고 빠르며 기억하기 쉬우 며 시간 순서를 유지합니다. 그리고 Guid
내가 찾은 유일한 장점은 독창적이라는 것입니다. 어떤 경우에 a Guid
보다 낫고 int
왜 그렇습니까?
내가 본 것에서 int
, 많은 경우에 관계없는 수 제한을 제외하고는 결함이 없습니다.
왜 정확히 Guid
만들어 졌습니까? 실제로 간단한 테이블의 기본 키 역할을하는 것 이외의 목적이 있다고 생각합니다. ( Guid
무엇 을 위해 사용하는 실제 응용 프로그램의 예 입니까?)
SQL Server의 (Guid = UniqueIdentifier) 유형
답변
이것은 여기 와 여기 에 스택 오버플로 에서 요청되었습니다 .
Jeff의 게시물 은 GUID 사용의 장단점에 대해 많이 설명합니다.
GUID 전문가
- 모든 테이블, 모든 데이터베이스 및 모든 서버에서 고유
- 다른 데이터베이스의 레코드를 쉽게 병합 할 수 있습니다
- 여러 서버에 데이터베이스를 쉽게 배포 할 수 있습니다
- 데이터베이스로 왕복하지 않고 어디에서나 ID를 생성 할 수 있습니다.
- 대부분의 복제 시나리오에는 GUID 열이 필요합니다.
GUID 단점
- 전통적인 4 바이트 인덱스 값보다 4 배나 더 큽니다. 주의하지 않으면 성능과 스토리지에 심각한 영향을 줄 수 있습니다.
- 성가신 디버깅 (
where userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}'
)- 생성 된 GUID는 최상의 성능 (예 :
newsequentialid()
SQL Server 2005+) 및 클러스터 된 인덱스 사용을 위해 부분적으로 순차적이어야 합니다.
성능이 확실하고 레코드를 복제하거나 병합하지 않으려는 경우을 사용 int
하고 자동 증분 ( SQL Server의 ID 시드 )을 설정하십시오.
답변
데이터를 외부 소스와 동기화하는 경우 지속적인 GUID가 훨씬 더 좋습니다. GUID를 사용하는 빠른 예는 고객에게 네트워크를 크롤링하고 특정 클래스의 자동 검색을 수행하고 찾은 레코드를 저장 한 다음 모든 고객 레코드를 중앙 데이터베이스에 통합하기 위해 보내는 도구입니다. 우리 끝에 다시. 정수를 사용하면 7,398 개의 “1”을 갖게되며 어느 “1”이 어떤 것인지 추적하기가 훨씬 더 어려워집니다.
답변
나는 성공적으로 하이브리드 접근법을 사용했습니다. 테이블에는 자동 증분 기본 키 정수 id
열과 guid
열이 있습니다. 는 guid
고유 전역 행을 식별하는 데 필요한과로 사용할 수 있습니다 id
정렬 및 행의 인간의 식별 된 조회에 대해 사용할 수 있습니다.
답변
일부 모범 사례에서는 여전히 사용하려는 전체 값 집합에 적은 메모리를 사용하는 데이터 형식을 사용해야한다고 언급하고 있습니다. 예를 들어, 소규모 사업체에 다수의 고용주를 저장하기 위해 사용하고 100에 도달하지 않을 것이라면 int (smallint)조차도 bigint 값을 사용하도록 제안하지 않을 것입니다.
물론, 이것의 단점은 “확장성에 대해 말하십시오!”와 같습니다.
또한 이것이 완전히 관련이 없다는 것을 알고 있지만 이에 관한 또 다른 요인이 있습니다. 익히지 않을 때는 일반적으로 자동 생성되지 않은 기본 키를 사용하는 것이 좋습니다. 예를 들어, 운전자 정보를 저장하는 경우 “ID”에 대한 새로운 자동 생성 열을 생성하지 않아도 라이센스 번호 만 사용하십시오.
나는 이것이 분명하게 들린다는 것을 알고 있지만, 자주 잊혀지는 것을 본다.
맥락 : 답변의이 부분은 PK가 레코드의 고유 한 데이터 식별자가되기를 원하는 데이터 이론적 접근 방식에서 해결되었습니다. 대부분의 경우 우리는 이미 존재 할 때 생성하므로 이전 답변입니다.
그러나 이러한 데이터 포인트를 엄격하게 제어 할 수있는 경우는 거의 없으므로 수정 또는 조정이 필요할 수 있습니다. 기본 키로는 그렇게 할 수 없습니다 (물론 할 수는 있지만 고통 스럽습니다).
설명을 해주신 @VahiD에게 감사드립니다.
답변
자동 증분 ID를 사용하면 비즈니스 활동에 대한 정보가 유출 될 수 있습니다. 상점을 운영하고 order_id
있고 구매를 공개적으로 식별하는 데 사용하는 경우 누구나 간단한 산술로 월별 판매 수를 확인할 수 있습니다.
답변
GUID 생성 방법에 관한 또 다른 것. mrdenny는 newsequentialid ()를 사용하더라도 인스턴스를 다시 시작하면 새 값이 이전 처리에서 남은 “구멍”으로 시작된다고 올바르게 지적했습니다. “순차적”GUID에 영향을주는 또 다른 것은 네트워크 카드입니다. 올바르게 기억하면 NIC의 UID가 GUID 알고리즘의 일부로 사용됩니다. NIC를 교체하면 순차적 인 측면을 유지하기 위해 UID가 더 높은 가치를 보장하지 않습니다. 또한 여러 NIC가 알고리즘을 사용하여 값 할당에 어떤 영향을 줄 수 있는지 잘 모르겠습니다.
그냥 생각하고 올바르게 기억하고 싶습니다. 좋은 하루 되세요!
답변
둘 다 사용
유지 관리가 쉽고 외래 키 관계로 사용하기 때문에 기본 키에 int / Bigint 를 사용하십시오 .
그러나 모든 행에 고유 한 열이 있도록 열을 GUID에 바인딩하십시오.