質問

SQL Server 2005では、特にSK(サロゲートキー用)にいくつかのUDT(ユーザー定義データ型)を定義しました。これらは32ビットの「int」として定義されました。その結果、サイズは4バイトでした。

SQL Server 2008では、整数データ型のUDTは精度に応じて異なるストレージメカニズムを使用します。

ストレージ      UDTの最大ストレージサイズを表示します。最大ストレージサイズは、精度に基づいて異なります。

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

1 – 9 ........................ 5

10 – 19 .................... 9

20 – 28 ................... 13

29 – 38 ................... 17

この結果、intとbigintの両方に基づくUDTは9バイトを占有することになります! 注:ネイティブのintおよびbigintデータ型は、それぞれ4バイトと8バイトを占有します!

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

これがなぜそうなのか(特にこの設計根拠は何でしたか)誰でも説明できますか? UDTとネイティブデータ型の違いはどうしてですか?

UDTを使用しないこと以外に、別のアプローチがありますか?

役に立ちましたか?

解決

すみませんが、間違っているようです。 「SELECTが壊れていない」ことを忘れないでください。マイクロソフトは、コンバージョンの問題が原因で広告を強力に宣伝することなく、エンジンのこのような重要な部分を変更しません。

引用するテーブルは、10進数および数値ストレージから取得します。 /ms187746.aspx "rel =" nofollow noreferrer "> MSDN 。基本的には int

を超えています

厳密なエイリアスを使用している場合、特別なデータ型の使用 int ベースのタイプは4バイト以上必要ではないことを強く示唆します。 CLRタイプを使用している場合、ドラゴン、またはそれ以上のオーバーヘッドがあります。

とにかく、 sysを調べることで、データ型のフットプリントを確認できます。タイプ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top