2012-07-16 2 views
0

나는 고유 식별자 (GUID)를 테이블의 기본 키로 사용하는 테이블을 만들었습니다. 이제는 내 테이블에 색인 생성을 만들어야합니다.이 테이블은 오류 로깅을 위해이 테이블을 사용할 것입니다. 다음테이블의 uniqueidentifier 열에 대한 인덱싱

내 테이블 구조

CREATE TABLE [dbo].[errors](
[error_id] [uniqueidentifier] NOT NULL, 
[assembly_name] [varchar](50) NULL, 
[method_name] [varchar](50) NULL, 
[person_id] [int] NULL, 
[timestamp] [datetime] NULL, 
[description] [varchar](max) NULL, 
[parameter_list] [varchar](max) NULL, 
[exception_text] [nvarchar](max) NULL) 

그래서 어떤 표는 기본 키 인덱스로 사용할 수 있습니다.

미리 감사드립니다.

+0

왜 처음에는 PK로 'uniqueidentifier'를 사용하고 있습니까? 어떻게 생성됩니까? 'NEWSEQUENTIALID()'또는 다른 것을 사용하고 있습니까? –

+0

C# 코드에서 GUID 형식으로 생성 중입니다. – Chets

+1

기본 키가있는 경우 이미 색인이 있어야합니다. –

답변

1

클러스터 된 인덱스로 사용하면 PK로 사용할 수 있지만 좋지 않습니다.이 경우 GUID는 모든 nc 인덱스 키에 복사되므로 훨씬 더 넓어지고 성능 문제가 발생할 수 있습니다. 또한 인덱스가 좋지 않으면 인덱스 공간이 더 많이 사용될 것입니다. 마지막 페이지 경합 문제를 피하기 위해 GUID를 사용한 경우 일종의 해싱 기술을 사용하여 데이터가 차등 페이지에 있는지 확인하십시오.하지만 이 경우 PK를 사용하여 양식 테이블을 선택하는 동안 동일한 해싱을 사용해야합니다.

+0

답변 해 주셔서 감사합니다. 그래서 내가 어떻게 내 오류 로깅 테이블에 기본 키를 만들 수 제안 할 수 있습니다. – Chets

+0

많은 것들에 달려 있습니다. 오류 로깅 테이블이 채워지는 방법은 하루에 몇 번입니까? 마지막 페이지 경합을 일으키고 있습니까 (이는 시뮬레이트 된 삽입이있을 때 발생합니다)? 검색어를 선택하는 과정에서 어떻게 표를 사용합니까? 구별되는 레코드를 원할 경우 다른 열을 PK로 사용하지 않으면 PK로 GUID를 가질 수 있습니다 (레코드를 고유하게 정의 할 수 있음). 그런 다음 쿼리를 기반으로 클러스터 된 인덱스를 만들 수 있습니다. 적절한 클러스터 된 인덱스와 다른 인덱스를 가지려면 쿼리 패턴뿐 아니라 모든 변경 패턴 (DML)을 살펴야합니다. –

+0

question.please 내 테이블 구조를 추가하고 기본 키 및 인덱싱 – Chets

관련 문제