문제

일했의 수에 대한 데이터베이스 시스템에서 과거는 항목을 이동하는 데이터베이스 간 것입되었습니다면 모든 데이터베이스 키되었다 GUID/UUID 값이 있습니다.나는 고려 내려가는 이 경로는 몇 번 있지만,그상의 불확실성,특히 주위의 성능 및 취소를 읽으로 전화-할 수 있습니다.

누군가는 광범위한 조사를 수행하였으로 Guid 데이터베이스에서?어떤 장점이아가는 방법,그리고 무엇을 가능성이 높은 함정을?

도움이 되었습니까?

해결책

장점:

  • 생성할 수 있는 오프라인 상태로 만듭니다.
  • 게 복제 사소한(반대로 int'의,그것을 만드는 정말 하드)
  • ORM 일반적으로 다음과 같이 그들을
  • 독특한 응용 프로그램에서.그래서 우리가 사용할 수 있습니다 PK 의에서 우리의 CMS(guid)에서 우리의 응용 프로그램(도 guid)및 알고 우리는 결코 얻을 것입니다.

단점:

  • 더 큰 공간을 사용하지만,공간이 cheap(er)
  • 수 order by ID 을 얻을 삽입하기 위해.
  • 할 수 있는 예쁘에서 URL 이지만,정말로,현재 하고 있는 퍼팅이 진짜 DB 키 URL 에서!?
  • 어렵게 수동으로 디버깅하지만,어려운 일이 아니라는 것입니다.

개인적으로 난 그들을 사용하여 대부분의 PK 의 모든 시스템의 관심을 하지만,나는"교육"시스템에서는 모든 복제,그래서 우리는 있어야 했다.만,느린 ftp 를 방.

나는 생각 중복 데이터는 것은 쓰레기-얻을 수 있는 중복 데이터 그러나 당신이 그것을 하십시오.대리 키는 일반적으로 frowned 어디까지 왔습니다.우리가 사용하는 워드 프레스 시스템도

  • 에 대한 고유 ID 행(GUID/무엇이든).용자에게 표시되지 않.
  • 공공 ID 를 생성하면서 어떤 분야(예:제목 그것은 제목의 기사)

업데이트: 그래서 이 하나를 얻+1'ed 많이,그리고 나는 생각이 나는 점을 알아야 합 큰 단점 GUID PK 의:클러스터 인덱스입니다.

이 많은 경우의 기록,인덱스에 GUID 를 삽입 성능을 빨아,당신이 얻을 삽입에 임의의 장소의 목록에서 아이템(운),아이 끝(빠른)

그래서 만약 당신이해야 삽입하의 성능,어쩌면 사용하는 자동 inc INT,그리고 생성 GUID 를 공유하려면 그것으로 누군가가 다른 사람을(즉,그것을 보여 사용자에게 URL)

다른 팁

@매트 Sheppard:

말하는 테이블이 있습니다.확실히 당신을 원하지 않는 고객에 존재하는 테이블을 두 번 이상,또는 많은 혼란이 일어날 것입 통신 판매 및 물류 부서(특히 경우 여러 행에 고객에 대한 다른 정보를 포함).

그래서 당신은 고객의 식별자를 고유하게 식별하는 고객고 있는지 확인하는 식별자를 알려진에 의해 고객(에서 청구)므로,고객과 고객 서비스 사람들이 일반적인 경우에는 그들이 필요로 통신할 수 있습니다.을 보장하지 않 중복된 고객의 레코드를 추가하는 독창성-제약 테이블에 하나,를 통해 기본 키에는 고객의 식별을 통해 또는 NOT NULL+독특한 제약 조건에서 고객을 식별자는 열이 있습니다.

다음으로,어떤 이유로(는 생각할 수 없다),당신은 추가 GUID 를 열고 고객 테이블과 기본 핵심이다.는 경우 고객의 식별자를 열기를 지금 없이 독창성 보증,당신이 요구하는 미래의 문제에 걸쳐 조직이기 때문에 Guid 를 항상 독특한입니다.

일부는"건축가"말할 수 있습니다 당신은"오,하지만 우리가 처리할 실시 고객 고유성 제약 조건에서 우리의 응용 프로그램 계층!".오른쪽.패션에 관한 일반적인 프로그래밍 언어를(특히)중 계층 프레임워크의 변경은 모든 시간,일반적으로 결코-라이브 데이터베이스.그리고 거기에 매우 좋은 기회가 시점에서 필요한 데이터베이스에 액세스하지 않고를 통해 현재의 응용 프로그램입니다.==문제입니다.(그러나 다행히도,당신은 그리고"건축가가"가는 길입니다,그래서 당신은 없을 정리하는 엉망입니다.) 다른 말로:하지 분명한 제약 조건에서 데이터베이스(및 다른 계층,뿐만 아니라,시간이 있다면).

다른 말로:좋은 이유가있을 수 있습니다 추가 GUID 를 열면 테이블이지만,떨어지지 않기 위해 유혹하는 낮은 야망 내 일관성을 유지하기 위해 실시 (==non-GUID)정보.

주요 장점은 만들 수 있는 독특한 아이디의 없이 데이터베이스에 연결.와 id 가 전 세계적으로 독특한 그래서 당신은 수 있습 easilly 데이터를 결합하는 다른 데이터베이스가 있습니다.이러한 것처럼 작은 장점이 있지만 나에게 많은 작업의 과거입니다.

주요 단점은 조금 더 많은 저장 필요하지 않음(문제에 현대적인 시스템)와 id 의하지 않은 정말로 인간이 읽을 수 있습니다.이 문제가 될 수 있습니다면 디버깅할 수 있습니다.

거기에 몇 가지 성과 같은 문제 index 조각.그러나 사람들은 easilly 풀 수 있(빗 guid 를 통해 지미 nillson: http://www.informit.com/articles/article.aspx?p=25862 )

편집 병합된 내 두 개의 이 질문에 답하게

@매트 셰퍼드는 나는 그 수 있다는 것을 의미한 복제 행 다른 Guid 를 기본으로 키가 있습니다.이 문제는 어떤 종류의 대리지 Guid.고 말한 그것은 easilly 에 의해 해결을 추가하는 의미 있는 독특한 제약 조건을 non-key 열이 있습니다.대안을 사용하는 것이 천연 키고 그 실제 문제를..

Guid 발생할 수 있습니다 많이 나중에 문제가 발생하지 않는 경우에는 그 사용으로"uniqifiers"시키고,중복 데이터를 얻을 당신의 테이블이 있습니다.를 사용하려면 Guid 를 고려하시기 바랍니 계속 유지 하는 독특한 제한 조건에서 다른 열(s).

왜 사람을 언급한 성능은?이 여러 개 있는 경우,조인을 기반으로 모든에서 이러한 불쾌한 Guid 성과를 통해 갈 것이다,바닥에 있었:(

다른 하나의 작은 가지 고려해야 할 문제는 사용 GUID 를 기본 키로도 사용하는 경우는 열로 인덱스(상대적으로 일반적인 관행).당신은 당신을 데려 갈 수중에 삽입하기 때문에 자연의 guid 을 시작하지 않을 순차에서 어쨌든,따라서 그들의 것 페이지 분할 등을 삽입할 때.뭔가를 고려하는 경우 시스템은 높은 IO...

기본 키-id-versus-guid

의 비용 Guid 를 기본 키로 (SQL Server2000)

신화,GUID 대자동 증가 (MySQL5)

이것은 정말 당신이 무엇을 원합니다.

UID 장점

  • 독특한 모든 테이블에,모든 데이터베이스,각 서버
  • 쉽게 할 수 있는 합병에서 레코드의 다른 데이터베이스
  • 쉽게 배포할 수 있습의 데이터베이스를 여러 서버
  • 생성할 수 있습니다 Id,어디서나 대신하여 데이터베이스에 대한 왕복
  • 대부분 복제 시나리오를 필요로 GUID 를 열을 어쨌든

GUID 단점

  • 그것은 무려 4 배 더 큰 것보다는 전통적인 4 바이트 인덱스 가치이 있을 수 있는 심각한 성능과 저장 의미하지 않은 경우 주의깊
  • 복잡하는 디버그(는 userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}')
  • 생성된 Guid 를 해야할 부분적으로 순차에 대한 최고의 성능을(예를 들어,newsequentialid()에서 SQL2005)을 사용하려면 클러스터 인덱스

가되지 않은 것은 정말 해결하,즉 사용 random (UUIDv4)Id 를 같이 기본 키가 해의 성능 primary key index.그것은 일이 일어날 것인지 여부 테이블 주위에 클러스터의 키입니다.

RDBMs 일반적으로의 고유성을 보장하기 위 하여야 하며,검색,키에라고 하는 구조 BTree 는 검색으로 나무 큰 분기 계수(검색 트리에는 분기 요인의 2).지금,순차적 정수 ID 을 일으킬 것이라는 삽입가 발생할만 나무의 측면 떠나,대부분의 리프 노드는 그대로 유지합니다.추가 임의의 표는 원인이 될 것이 삽입하여 분할 잎 노드를 통해 모든 인덱스입니다.

마찬가지로는 경우에 저장된 데이터는 대부분의 시간적,경우가 종종 가장 최근에 필요한 데이터 액세스와 결합에 대한 가장합니다.임의의 표면 패턴에 아무런 이득을 주지 않을 것이고,더 명중 index 행함으로써,더 필요로 하의 인덱스 페이지 메모리에 있습니다.으로 순차적 Id 는 경우 가장 최근의 데이터가 가장 필요로하는,뜨거운 인덱스 페이지 필요한 것이 적은 메모리다.

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