복붙노트

[SQL] 데이터베이스 ID 필드의 고유 식별자 대 INT

SQL

데이터베이스 ID 필드의 고유 식별자 대 INT

나는 (가까운 미래에 가능 SQL 서버 2008) SQL 서버 2005을 사용하여 웹 사이트에 대한 새 데이터베이스를 만드는 오전. 응용 프로그램 개발자로서, 나는 관계에 사용되는 테이블의 ID 필드에 정수 (또는 BIGINT 등)을 사용하는 많은 데이터베이스를 본 적이있다. 그러나 최근에 나는 또한 ID 필드의 고유 식별자 (GUID)를 사용하여 데이터베이스를 보았다.

내 질문은 하나가 다른 통해 이점을 가지고 있는지입니까? 필드 등, 쿼리 및 가입에 대한 빠를 정수 것인가?

UPDATE : 그것은 명확하게하려면,이 테이블의 기본 키입니다.

해결법

  1. ==============================

    1.GUID가 있기 때문에 높은 난수의 클러스터 키 등의 문제가있다. 내가 클러스터 된 인덱스 키 같은 GUID를 사용하고 싶습니다,하지만 다른 사람들은 인덱스 성능 문제가 발생할 수 있음을 주장하고 있습니다 :이 문제는 지난 윈스 테크넷 매거진 Q & A 란에 폴 랜달에 의해 해결되었다. 그렇다면, 그 이유를 설명 할 수 있습니다,이 사실이고?

    GUID가 있기 때문에 높은 난수의 클러스터 키 등의 문제가있다. 내가 클러스터 된 인덱스 키 같은 GUID를 사용하고 싶습니다,하지만 다른 사람들은 인덱스 성능 문제가 발생할 수 있음을 주장하고 있습니다 :이 문제는 지난 윈스 테크넷 매거진 Q & A 란에 폴 랜달에 의해 해결되었다. 그렇다면, 그 이유를 설명 할 수 있습니다,이 사실이고?

    이제 토론 클러스터 된 인덱스에 대해 특별히 것을 명심. 당신은 당신이 클러스터 키 또는 단지 기본 키로 그것을 의미하는 경우 불분명하다 'ID'로 열을 사용하고 싶은 말은. 일반적으로 두 개의 중복, 그래서 당신은 클러스터 된 인덱스로 사용하려는 가정합니다. 즉 가난한 선택 이유 이유는 제가 위에서 언급 한 기사의 링크에 설명되어 있습니다.

    비 클러스터 인덱스의 GUID를 여전히 몇 가지 문제가 있지만, 아니 거의 큰 아니라 그들이 테이블의 왼쪽 클러스터 키 때 등. 다시 말하지만, GUID를 소개합니다 페이지 분할과 분열의 임의성은 비 클러스터형 인덱스 레벨 전용 (훨씬 작은 문제)에 그것을합니다.

    자신의 크기에 따라 그들을 비난 GUID를 사용을 둘러싼 많은 도시 전설이있다 (16 바이트)를 int (4 바이트)에 비해 그들이 사용하는 경우 끔찍한 성능 운명을 약속드립니다. 이것은 약간 과장되어있다. 크기 (16)의 키를 적절하게 설계된 데이터 모델에 여전히 매우 peformant 키가 될 수 있습니다. 인덱스에 더 낮은 밀도 비 리프 페이지에서 INT 결과로 큰 등의 4 배되는 것은,이 테이블의 대부분을위한 실제 문제가되지 않습니다 것은 사실이지만. B- 트리 구조는 자연적으로 잘 균형 트리이며 트리 탐색의 깊이는 INT 키에 반대 때문에 성능이 유사하다 GUID 키를 기반으로 값을 찾고, 거의 문제가 없다. 리프 페이지 탐색 (예. 테이블 스캔)은 비 리프 페이지를 보지 않고, 기록 자체가 도입 된 여분의 12 바이트보다 훨씬 크다으로 페이지 크기에 GUID 크기의 영향은 일반적으로 매우 작은 GUID를하여. 나는에 따라 듣고 - 말의 조언을 것 그래서 소금, 약간 큰, 그레인 '16 바이트 대 4'. 다른 열이 테이블에 얼마나 많은 얼마나 많은 참조 (예를 사용하고 있습니다 : 경우 개별 사건에 분석 및 크기에 미치는 영향이 진짜 차이가 있는지를 결정 (즉, 큰 영향은 GUID 리프 페이지에 크기가 방법에 대해 설명합니다.). 어떻게 사실을 그들이) 더 큰 외부 키를 저장해야하기 때문에 다른 많은 테이블이 증가 할 것이다.

    그들은 최근 나쁜 언론을 많이 받고 일부는 가치가없는 때문에 나는 GUID를 임시 방어의 종류에서 모든 세부 사항을 전화 드렸습니다. 그들은 자신의 장점을 가지고있는 분산 시스템 (당신은 데이터 이동을 얘기하는 순간, 복제 또는 동기화 프레임 워크 또는 무엇이든을 통해 일)에 필수적이다. 나는 나쁜 결정은 그들이 적절한 고려하지 않고 피하다 된 GUID 나쁜 평판에 기초하여 만들어지고 보았다. 가능하면 순차적 GUID를 사용하면, 클러스터 키 같은 GUID를 사용할 필요는 임의성의 문제를 해결해야합니다하지만, 사실이다.

    그리고 마지막으로, 귀하의 질문에 대답 : 당신이 GUID를, 사용의 INT를 사용하는 구체적인 이유가없는 경우.

  2. ==============================

    2.GUID는 더 많은 공간을 차지 속도가 느린하는 int보다 더 될 것입니다 - 당신이 NEWSEQUENTIALID () 함수를 사용하는 경우에도. 당신이 동기화 프레임 워크를 복제을하거나 사용하려는 경우 당신은 꽤 많이 GUID를 사용해야합니다.

    GUID는 더 많은 공간을 차지 속도가 느린하는 int보다 더 될 것입니다 - 당신이 NEWSEQUENTIALID () 함수를 사용하는 경우에도. 당신이 동기화 프레임 워크를 복제을하거나 사용하려는 경우 당신은 꽤 많이 GUID를 사용해야합니다.

  3. ==============================

    3.BIGINTs의 INT는 8 바이트 아칸소 4 바이트이며, GUIDS는 16 바이트이다. 더 많은 공간이 데이터를 표현하는 데 필요한, 더 많은 자원이 그것을 처리하는 데 필요한 - 디스크 공간, 메모리 등을 지금의 (a) 그들은 느린,하지만 볼륨이 문제 (수백만의 경우 (b)는이 중요한 아마 단지 아주, 아주 짧은 시간에 행 또는 거래의 수천.)

    BIGINTs의 INT는 8 바이트 아칸소 4 바이트이며, GUIDS는 16 바이트이다. 더 많은 공간이 데이터를 표현하는 데 필요한, 더 많은 자원이 그것을 처리하는 데 필요한 - 디스크 공간, 메모리 등을 지금의 (a) 그들은 느린,하지만 볼륨이 문제 (수백만의 경우 (b)는이 중요한 아마 단지 아주, 아주 짧은 시간에 행 또는 거래의 수천.)

    GUID를의 장점은 (거의)임을 글로벌 고유이다. GUID를 (적절한 알고리즘을 사용하고 SQL 서버 XXXX) 적절한 알고리즘을 사용하여 생성하고, 두 개의 GUID가 이제까지 모두 수 없습니다 - 당신이 그들을 생성, 아무리 자주 얼마나 많은 컴퓨터에 상관없이. (- 나는 세부 사항을 잊지 이것은 사용 72 년 후에 적용되지 않습니다.)

    여러 서버에서 생성 된 고유 식별자가 필요한 경우, GUID를 유용 할 수 있습니다. 당신이 perforance과 20 억의 값에 따라 몬도이 필요한 경우의 int 아마 괜찮습니다. 마지막으로 아마도 가장 중요한 데이터가 그들과 함께 자연 키 스틱을 가지고 있으며, 서로 게이트 값을 잊은 경우.

  4. ==============================

    4.긍정적으로 당신이 경우에, 절대적으로 다음 고유 ID, GUID를해야합니다. 혹시거야 병합, 동기화, 복제라면, 당신은 아마 GUID를 사용해야합니다 의미.

    긍정적으로 당신이 경우에, 절대적으로 다음 고유 ID, GUID를해야합니다. 혹시거야 병합, 동기화, 복제라면, 당신은 아마 GUID를 사용해야합니다 의미.

    덜 강력한 것들의 int를 들어, 테이블이 성장하는 방법 큰에 따라 충분합니다.

    대부분의 경우에서와 같이, 적절한 대답은, 그것은 의존한다.

  5. ==============================

    5.아니 기본 키로서, 등 복제를 사용합니다.

    아니 기본 키로서, 등 복제를 사용합니다.

    킴벌리 L 트립 기사

  6. ==============================

    6.완전 JBrooks로 합의했다. 나는 테이블이 큰 경우 말을 원하고, 조인 당신은 significally 성능이 저하 될 수 GUID를 사용하여, 특히 파생 테이블, 선택을 사용합니다.

    완전 JBrooks로 합의했다. 나는 테이블이 큰 경우 말을 원하고, 조인 당신은 significally 성능이 저하 될 수 GUID를 사용하여, 특히 파생 테이블, 선택을 사용합니다.

  7. from https://stackoverflow.com/questions/1151625/int-vs-unique-identifier-for-id-field-in-database by cc-by-sa and MIT license