2009-03-13 4 views
4

SQL Server 2005에서는 UDT (사용자 정의 데이터 형식)를 특히 SK (대리 키용)로 정의했습니다. 이들은 32 비트 'int'로 정의되었습니다. 결과적으로 크기는 4 바이트였습니다. UDT를위한 최대 저장 크기를 표시합니다 SQL Server UDT 크기 2005 ~ 2008

저장 : SQL Server 2008의

는 정수 데이터 유형에 대한 UDT는 정밀도에 따라, 다른 저장 메커니즘을 사용합니다. 최대 저장소 크기는 정밀도에 따라 다릅니다.

정밀 (자리) ..... 저장소 (바이트)

1-9 ........................ 5

10-19 .................... 9

20-28 .................. ... 13

29 -이 38 ................... 17

한 결과는 INT와 BIGINT BOTH를 기반으로 UDT를 차지하는 것입니다 9 바이트! 참고 : native int 및 bigint 데이터 유형은 각각 여전히 4 및 8 바이트를 차지합니다.

9 바이트가 대리 키 UDT에 대해 꽤 무거운 것처럼 보입니다!

누구나 이것이 왜 그렇게 (특히 이것에 대한 설계 이유가 무엇 이었는지) 설명 할 수 있습니까? 어떻게 UDT와 원시 데이터 유형간에 이러한 불일치가 발생합니까?

UDT를 사용하지 않는 것 외에 다른 방법이 있습니까?

답변

1

실례지만, 나에게 잘못되었다고 생각됩니다. "SELECT는 손상되지 않습니다"라는 것을 기억하십시오. Microsoft는 변환 문제로 강하게 광고하지 않고도 이러한 중요한 엔진을 수정하지 않습니다.

당신이 인용하고있는 테이블이 기본적으로있는, MSDN진수숫자 저장에서 오는 이상 INT

당신이 엄격한 별칭을 사용하는 경우, Using special datatypes 강하게 힌트 그 int 기반 형식은 4 바이트 이상을 사용합니다. CLR 유형을 사용하는 경우 용 또는 더 많은 오버 헤드가있을 수 있습니다.

어쨌든, 당신은 sys.types

+0

안녕 요한을 조사하여 해당 주셔서 감사합니다 당신의 데이터 유형의 풋 프린트를 확인할 수 있습니다. 나는 당신이 만든 점을 이해합니다. 하지만 "새로운 사용자 정의 데이터 유형"으로 이동하여 int를 기반으로 UDT를 만들면 정밀도는 10으로 표시되고 저장소는 sys.types에서 제안하는대로 4가 아닌 9 바이트로 표시됩니다. 그것에 대한 의견이 있으십니까? – PaoloFCantoni

+0

안녕하세요 요한, 추가 연구에 따르면 UI 버그 인 것으로 나타났습니다. sys.types에 할당 된 실제 저장소 크기는 int의 경우 4 바이트입니다. 도움 주셔서 감사합니다. – PaoloFCantoni

+0

감사합니다. (repwhoring 부분) 내 대답이 도움이 되었다면, upvote하고 허용으로 표시하십시오. –