2009-03-13 16 views
4

SQL Server 2005では、UDT(User Defined Datatypes)を特にSK(代理キー用)と定義しました。これらは32ビットの 'int'として定義されていました。その結果、サイズは4バイトでした。 UDTの最大記憶サイズを表示 SQL Server UDTのサイズ2005〜2008

ストレージ:SQL Server 2008では

は、整数データ型のUDTは、精度に応じて、異なるストレージメカニズムを使用します。最大ストレージサイズは、精度に基づいて異なります。

精度(桁)......ストレージ(バイト)

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

19 .................... 9

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

10 ... 13

29 - この38 ................... 17

1つの結果はint型とBIGINTの両方に基づいてのUDTが占めるということです9バイト! 注記:native intデータ型とbigintデータ型は、依然としてそれぞれ4バイトと8バイトを占有しています。

9バイトはサロゲートキーUDTのかなり重いようです!

誰にもこれがなぜそうであるのか説明することはできますか(特にこれの設計理念は何ですか?)どのようにUDTとネイティブデータ型の間にこのような相違がありますか?

UDTを使用しないこと以外は別の方法がありますか?

答えて

1

すみませんが、私には間違っているようです。 「SELECTは壊れていない」ことを覚えておいてください。変換に関する問題があるため、マイクロソフトはそのようなエンジンの重要な部分を強く宣伝することなく変更しません。あなたは、厳密なエイリアスを使用している場合は、基本的には以上のint型

ある

あなたが引用しているテーブルがMSDN小数点数値ストレージから来て、Using special datatypes強くをヒントintベースのタイプは4バイト以上必要です。 CLRタイプを使用している場合は、ドラゴン以上のオーバーヘッドがあります。

とにかく、あなたは、sys.types

+0

こんにちはヨハンに探して、そのためのおかげで、あなたのデータ型のフットプリントを確認することができます。私はあなたが作ったポイントを理解しています。しかし、「新しいユーザー定義データ型」に入り、intに基づいてUDTを作成すると、精度は10として表示され、記憶域はsys.typesが示唆するように4ではなく9バイトとして表示されます。それに関するコメント? – PaoloFCantoni

+0

こんにちはJohanさん、さらなる調査によると、それはUIのバグです。 sys.typesに割り当てられる実際のストレージ容量は、intの場合は4バイトです。 ご協力いただきありがとうございます。 – PaoloFCantoni

+0

ありがとうございます。 (代行部分)私の答えが助けになったら、アップボートして受け入れてください。 –

関連する問題