SQL Server Guid (Active Directory) vs int
-
22-08-2019 - |
문제
우리는 이전 주문 시스템에서 많은 데이터를 마이그레이션했습니다. 이 시스템은 사용자의 이니셜을 생성 한 각 주문에 대해 "주문"테이블에 저장했습니다. 이제 Active Directory를 보는 견해를 얻었으므로 Active Directory ObjectGuid (또는 Guid를 참조하는 것)로 해당 이니셜을 업데이트하고 싶습니다. 이를 통해 "주문"테이블 레코드를 업데이트 할 걱정없이 Active Directory의 사용자 이니셜을 변경할 수 있습니다.
Guids vs Ints를 사용할 때 인덱스 성능이 부족하다는 것을 읽었습니다. 이를 해결하는 한 가지 방법은 안내서를 int에 맵핑 한 다음 int 값을 주문 테이블에 저장하는 테이블이 있습니다. 이것이 좋은 생각일까요? 이견있는 사람?
해결책
나는 a 사용자 엔티티는 이미 데이터베이스 디자인에 존재하지만, 그렇지 않은 경우 솔루션이 필요하다고 생각합니다.
그렇게 가정합니다 사용자 엔티티가 존재합니다. 설명했듯이 userID (int)를 명령 모든 관련성과 관련된 표 사용자 세부 사항 주문하다, 이니셜이 아닌 단지 이니셜이 아니라 (참고 : 이니셜은 아마도 주문하다 테이블이지만 오히려 사용자 또는 user_details 이 토론의 초점은 아니지만 표.
그런 다음 Guid 열을 사용자 테이블에 추가 할 수 있습니다. 별도의 조회 테이블이 필요하다고 생각하지 않습니다.
이해가 되나요?
다른 팁
Guids의 인덱스 성능은 일반적으로 16 바이트 필드의 다른 인덱스와 다릅니다. 공연을 위해 Guid가 치명적인 곳은 다음과 같이 사용할 때입니다. 클러스터링 키 SQL 서버 테이블에서.
SQL 서버 테이블 ~이다 클러스터 된 키는 해당 키에 의해 물리적으로 주문됩니다. 지도는 본질적으로 완전히 무작위이므로, 이것은 대규모 색인 조각화로 이어지므로 a) 끊임없는 사료와 관리 및 재구성이 필요하지만 b) 매일 밤 재구성하더라도 여전히 고통을 겪습니다. 따라서 실제로 모범 사례는 클러스터링 키에 대한 안내 (새로운 "순차적"안내서조차도)를 피하는 것입니다.
더 많은 배경 정보와 Guid가 클러스터 키가 매우 잘못된 이유에 대한 훌륭한 글쓰기는 "Indexing의 여왕"블로그, Kimberly Tripp을 참조하십시오.
그녀의 통찰력은 가장 가치가 있습니다. 읽고 내면화하고 따르십시오! 당신은 그것을 후회하지 않을 것입니다.
마크