SQL Server UDTサイズ2005〜2008
-
22-07-2019 - |
質問
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が壊れていない」ことを忘れないでください。マイクロソフトは、コンバージョンの問題が原因で広告を強力に宣伝することなく、エンジンのこのような重要な部分を変更しません。
引用するテーブルは、
厳密なエイリアスを使用している場合、特別なデータ型の使用 int ベースのタイプは4バイト以上必要ではないことを強く示唆します。 CLRタイプを使用している場合、ドラゴン、またはそれ以上のオーバーヘッドがあります。