2009-05-14 3 views
1

현재 사용자 ID에 대해 GUID를 사용하는 ASP.NET 용 SQL 멤버 자격 공급자를 사용하고 있습니다. 내 응용 프로그램에는 User 테이블에 외래 키 관계가있는 몇 가지 사용자 정의 테이블이 있으며 표준 공급자가 사용자 ID에 대해 GUID를 사용함에 따른 디스크 공간 및 성능에 대해 염려합니다.ASP.NET 멤버 자격 공급자, 사용자 ID GUID 및 디스크 공간

누구나 이와 관련된 공간/성능 문제가 발생 했습니까? 그렇다면이 문제를 해결하기 위해 사람들이 구현 한 사용자 지정 방법이 있습니까?

모든 통찰력이나 제안이 가장 감사 할 것입니다.

감사

답변

5

예를 들어 INT 유형 대신 GUID를 사용하면 공간 문제가 발생할 수 있습니다. 한가지주의 할 점은 데이터베이스의 GUID 열에 클러스터 된 인덱스를 만들려고한다는 것입니다. 이 작업을 수행하지 마십시오. 기본적으로 GUID는 무작위이며 클러스터 된 인덱스가있는 열에 임의의 데이터를 삽입하면 몇 가지 문제가 발생합니다. 알고 계시 겠지만, 클러스터 된 것은 물리적 저장 순서를 의미합니다. 그래서 새로운 난수 값 (GUID)을 삽입 할 때 그 행은 일반적으로 테이블의 중간에 삽입되어야합니다. 이로 인해 대량으로 조각난 인덱스가 생성 될 수 있습니다.

내 조언은 GUID를 INT 값 (많은 사용자가 예상되는 경우 BIGINT)에 연결하고 다른 곳에서 INT를 사용하는 테이블을 만드는 것입니다. Fermin이 말한 것처럼.

1

당신은하지 그런 다음 사용자 정의 테이블의 정수를 사용할 수있는 정수 값으로 GUID를 매핑하는 사용자 정의 테이블을 가지고 있을까요?

UserId guid 
FriendlyUserId int //use this as FK in other tables? 
1

SQL Server 2005를 사용하는 경우 NewSequentialId() 메서드를 살펴볼 수 있습니다. Eric Swann은 회원 공급자와 함께 사용하는 good overview을 제공합니다. 또한 기본 GUID를 사용하는 이점에 대해서는 nice article이 있습니다. 다음은 기사에서 발췌 한 성능 비교입니다.

    [Reads] [Writes] [Leaf Pages] [Avg Page Used] [Avg Fragmentation] [Record Count] 
    IDENTITY(,)  0  1,683  1,667  98.9%   0.7%    50,000 
    NEWID()   0  5,386  2,486  69.3%   99.2%    50,000 
    NEWSEQUENTIALID() 0  1,746  1,725  99.9%   1.0%    50,000 
관련 문제