문제

우리는 이전 주문 시스템에서 많은 데이터를 마이그레이션했습니다. 이 시스템은 사용자의 이니셜을 생성 한 각 주문에 대해 "주문"테이블에 저장했습니다. 이제 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을 참조하십시오.

그녀의 통찰력은 가장 가치가 있습니다. 읽고 내면화하고 따르십시오! 당신은 그것을 후회하지 않을 것입니다.

마크

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