문제

나는 여러 테이블은 그만의 고유한 데이터이다(Guid)열에 있습니다.기 때문에 guid 은 금속(그리고 그들은 클라이언트 측의 생성된 그래서 사용할 수 없습 newsequentialid()),나는 기본이 아닌,클러스터 인덱스에 이 ID 분야 보다는 오히려주는 테이블을 클러스터 기본 핵심이다.

내가 무엇인지 궁금의 성능에 미치는 영향은 이에 대한 접근 방식이다.본 어떤 사람들이 좋습니다 테이블이 있어야 합 자동증가("id")int 으로 클러스터의 기본 키지 않는 경우에도 어떤 의미로 그것이 의미하는 데이터베이스 엔진이 자신을 사용할 수 있는 값을 신속하게 행하는 대신 북마크를 사용하.

나의 데이터베이스 통합을 통해 복제를 설정할 수는 없습니다,그래서 나는 주저에서 정체성 int 열로 조금 털이 바로 복제가 있습니다.

당신의 생각은 무엇입니까?한 테이블은 기본 키가?또는 확인하지 않는 클러스터가 사용되는 인덱스가 없는 경우 합리적 열을 인덱싱하는 방법은?

도움이 되었습니까?

해결책

다룰 경우 인덱스,당신이 무엇인지 결정하기 위해 테이블에 사용되는 것이다.당신은 주로 삽입 1000 행 초과 하지 않는 모든 쿼리,그러 인덱스가 충돌하는 성능이다.하는 경우에 당신은 1000 쿼리를,두 번째 다음을 가지고 있지 인덱스로 이어질 것을 아주 나쁜 성능입니다.최고의 일을 할 때 하 쿼리/인덱스를 사용하는 것입 쿼리 계획을 분석하고 SQL 프로파일러에서 SQL Server.이를 실행하고 있으로 비용이 많이 드는 테이블 스캔 또는 다른 성능을 차단기가 있습니다.

로 GUID 대 ID 인수,사람을 찾을 수 있습니다 온라인으로 맹세다.나는 항상 가르쳤을 Guid 를 사용하지 않으면 내가 정말 좋은 이유가 없습니다.Jeff 는 게시물에 대해 이야기를 사용하는 이유 Guid: https://blog.codinghorror.com/primary-keys-ids-versus-guids/.

아무것도 대부분과 마찬가지로 개발에 관련된 경우,당신이 찾고 있는 성능 향상을 위해,거기에 하나가 아니라 하나의 바른 대답이다.그것은 정말에 따라 달라집을 하려는 당신이 무엇을 달성하는 방법 당신은 당신을 구현하는 솔루션입니다.유일한 진정한 해답을 테스트하는 것입,테스트,그리고 다시 테스트에 대한 성능 메트릭을 위해 당신이 회의의 목표입니다.

[편집] @매트,후에는 일부에 대한 더 많은 연구 GUID/ID 토론에 나온 이 게시물입니다.같은 앞에서 언급하지 않은 것은 진정한 권리 또는 잘못된 응답이다.따라 특정 구현에 필요합니다.하지만 이들은 일부 매우 사용하는 이유 Guid 를 기본 키로:

예를 들어,문제가 있으로 알려진"핫 스팟",특정 페이지 테이블에 있는 데이터의 아래에 있는 상대적으로 높은 환 경쟁이 일어납니다.기본적으로,어떻게는 대부분의 트래픽에서 테이블(고,따라서 페이지 수준의 자물쇠 등)가 발생한 작은 영역에서의 테이블,으로 끝입니다.새로운 기록이 항상 이 핫스팟,기 때문에 정체성은 순차적으로 번호 생성기입니다.이 삽입이 곤란하기 때문에 그들이 필요로 하고속 인터넷 페이지에 잠금을 페이지를 그들은 추가(핫스팟).이를 효과적으로 직렬화 모두를 삽입하여 표 감사 페이지에 잠금 메커니즘이 있습니다.십시오()다른 한편으로 고생하지 않습니다.생성된 값을 사용하십시오()함은 순차에 대한 짧은 삽입(는 함수가 호출되는 것이 매우 빠르게 같은하는 동안 다중 행 삽입)일으키는 행 삽입 확산을 통해 무작위로 테이블 데이터 페이지를 대신 모두의 끝에서 제거에서 핫스팟합니다.

또한,때문에 삽입은 무작위로 배포의 기회 페이지의 분할은 크게 줄어듭니다.면서 페이지를 분리기와 너무 나쁜 영향을 추가한 지점에 위치하고 있습니다.ID,페이지를 채우기 요인은 무용으로 조정 메커니즘이고 있을 뿐만 아니라 세 100%-행 것이지에 삽입할 수 있는 페이지만 마지막 하나입니다.와십시오()할 수 있습니다 실제로 사용하게 채우기의 요인으로 성능이 활성화 도구입니다.당신은 설정할 수 있습니다인 수준에 근접 볼륨 추정 성장 사이에 인덱스 재구성,그리고 그 다음 일정을 다시 작성 시간을 사용하여 dbcc 재생성.이를 효과적으로 지연의 성과의 분할 페이지까지 시간.

면도 생각 해야 할 수 있습니다 복제 사용을 위한 테이블에서 질문할 수 있습니다 다음으로 잘 만들 PK 니다와 플래그 guid 분야에 대한 내용을 제거했.복제 요구할 것이 유일하게 평가 guid 분야와 함께 이 특성,그리고 그것이 하나를 추가하지 않는 경우가 존재합니다.는 경우 적절한 필드를 존재입니다,그것은 다만 하나를 사용하잖아있다.

또 다른 큰 장점에 대한 Guid 를 사용한 PKs 는 사실은 이 값은 실제로 보장된 고유-단지 중의 모든 값에 의해 생성 서버,하지만 모든 값에 의해 생성 모든 컴퓨터는 귀하의 db 서버,web 서버,응용 프로그램 서버는 클라이언트 또는 기계입니다.꽤 많은 모든 현대적인 언어의 기능을 생성하는 유효한 guid 지금습니다.NET 시스템을 사용할 수 있습니다.입니다.NewGuid.이것은 매우 편리합니다 다룰 경우 캐시 마스터 세부 사항 데이터 집합니다.당신의 고용에 미친 임시 키 입력 방식을 관련 당신의 레코드를 함께하기 전에 그들은 최선을 다합니다.당신은 단지 가져 완벽하게 유효한 새로운 Guid 를 운영 체제에서 각각의 새로운 기록을 영구적인 키 값에 시간 기록을 만들어집니다.

http://forums.asp.net/t/264350.aspx

다른 팁

기본 키음과 같은 세 가지 용도로 사용됩니다:

  • 을 나타내는 열(s)해야한
  • 을 나타내는 열(s)should be non-null
  • 문서는 의도는 이것은 독특한 식별자의 행

처음 두 지정할 수 있는 방법을 많이,당신은 이미 이루어집니다.

세 번째 이유는 좋은:

  • 인간을 위해,그래서 그들은 쉽게 볼 수 있습니다 당신의 의도
  • 에 대한 컴퓨터 프로그램을 수 있는 비교하거나 그렇지 않으면 프로세스의 테이블을 쿼리할 수 있는 데이터베이스 테이블의 주된 핵심이다.

기본 키가 있어야하지 않는 자동 증가하는 번호 필드에는,그래서 내가 말하는 것이 좋은 아이디어를 지정하 guid 를 열 primary key.

에 점프하기 때문에,매트의 유혹습니다.

당신이 이해하는 것이 필요하지만 클러스터 인덱스에 넣어 기본 키의 테이블 기본적으로,즉 두 가지 개념은 별도의 별도로 고려되어야한다.는 갑옷을 나타내는 방법으로 데이터를 저장하고 불에 의해 NCIXs 는 반면,PK 제공합성에 대한 각 행을 만족하는 논리적 요구 사항의 테이블에 있습니다.

테이블의없이 인터넷 연결은 힙.테이블 없이 PK 은 종종 간주하지""테이블.그것은 최고의 이해를 얻기 위해 모두 PK 및 갑옷 개념을 별도로 만들 수 있도록 합리적 의사 결정에서 데이터베이스를 디자인합니다.

Rob

아무도 대답하지 않제어떤 플러스/마이너 테이블의 없이 PK 도 클러스터 인덱스입니다.내 생각에는 경우에,당신은 최적화를 위한 빠르게 삽입(특히 대량 증가 삽입,예를 들어,을 때 당신은 대량으로 데이터를 로드하는 비 빈 table),이러한 테이블:없이터 없음 제한 없이 외국 열쇠 없음 기본값 및 기능,데이터베이스에서 간단한 복 모델,최고입니다.지하려는 경우에는 쿼리를 이 테이블(와 반대로 검색 전체)가 있습을 추가하려면 클러스터는 고유하지 않는 인덱스로 필요하지만 그들을 최소화합니다.

나도 항상 듣는 자동 증분 int 위해 좋은 성과하지 않는 경우에도 실제로 그것을 사용합니다.

기본 키가 될 필요는 없이 자동 증가 분야에서 많은 경우 이미 당신은 복잡한 테이블의 구조입니다.

대신,기본 키가 있어야한 최소의 원인에 대해 살펴보십시오(주는 가장 DBMS 수 있는 복합 기본 키로)고유하게 식별하는 튜플.

기술적 측면에서,그것이 되어야 할 다른 모든 분야에서 튜플은 완전히 기능적으로 의존한다.(그렇지 않은 경우 필요할 수 있는 프로그램에서).

에서 연습을,성능 문제를 의미할 수 있습을 병합하는 테이블과 사용하여 자동으로 증가하는 분야,하지만 나는 것을 기억에 대해 뭔가를 조기에 최적화되고 있다.

때문에 당신이 하고 있는 복제,귀하가 정확한 정체성은 뭔가를 stear 다.나는 당신의 GUID 를 기본 키 그러나 클러스터 이후 사용할 수 없습니다 newsequentialid.는 stikes 로 최고의 코스입니다.하지 않을 경우 그것은 PK 하지만 독특한 색인,그것은 조만간을 일으킬 수 있는 사람들을 유지하는 시스템을 이해하지 못하 FK 관계가 제대로 소개합니다.

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