2013-12-18 1 views
1

기본 키 열이 nchar 인 테이블이 있습니다.SQL 서버 uniqueidentifier Id

해당 형식을 바꿀 예정이었습니다. 새로운 uniqueidentifier 열을 ID로 추가하고 기본 키로 설정 한 다음 다른 테이블과의 관계를 다시 설정했습니다.

이 문자열 ID는 사용자가 입력했기 때문에 uniqueidentifier이 id 문자열보다 더 나은 선택이라고 생각했기 때문에이 작업을 수행했습니다. 기본 키로 사용되는 일종의 이름 속성입니다.

그러나 쿼리를 실행하면 속도가 느려진 것 같습니다. 이유는 알 수 없습니다.

+0

'uniqueidentifier column'에''cluster index'가 있는지 확인하고'nchar' 컬럼을'droped '했습니까? – Moumit

+0

기본 키를 변경하면 원래 PK의 색인이 제거되었을 수 있습니다. 쿼리에서 원래 PK를 사용하고 있다면 인덱스를 활용하지 않을 것입니다. 좀 더 db 객체 정의와 예제 쿼리를 제공 할 수 있습니까? – laylarenee

+0

이전 열을 삭제하지 않았지만 검색어도 수정했습니다. 모든 where 절에있는 모든 열을 색인화합니다. 여기서 uniqueidentifier 키는 클러스터 된 색인을 사용하지 않습니다. 그러나 성능 문제는 어떻게 든 사라졌지만 변경하지는 않습니다. – jannagy02

답변

1

Uniqueidentifier는 일반적으로 기본 키에 적합하지 않습니다. 이것은 radom 순서가 지정되지 않은 문자열이며 PK는 클러스터 된 인덱스입니다 (기본적으로).이 ID를 삽입하면 엔진이 아예 그 테이블의 중간에 삽입하려고하고 엔진을 아프게하면 테이블을 많이 차지하려고합니다. 처리.

PK에 대해 int 신원을 사용하려고하면, 원래의 strign 열은 히스토리 용으로 필요하다면 비 클러스터형 고유 인덱스로 남아있을 수 있습니다.

그리고이 (아주 작은) 기사를 읽으십시오. SQL Server central

추신 :이 포럼에 가입하지 않았다면 무료로 할 수 있습니다.

+0

그러나 클러스터 된 인덱스는 문제가되지 않습니다.이 테이블에는 많은 데이터가 없을 것입니다. 집계 된 보고서에 대한 일부 선택 항목이 있으며 속도가 느려집니다. 이 필드는 동등성을 테스트 한 where 절에만 있습니다. – jannagy02

+0

많은 테이블 크기에 따라 다르지만 다른 요소가 있습니다. 예제를 삽입하는 동안 선택하면 테이블이 병합되어 가능한 모든 테이블을 잠글 수 있습니다 (간단한 시나리오 일 수도 있고 격리 수준과 많은 다른 요인에 따라 달라질 수 있습니다). 어쨌든 몇 가지 예제 데이터로 SQL 바이올린을 만들면 더 정확한 답을 얻을 수 없습니다. – jean

관련 문제