かなりの数のTEXT列をに変更するには、サイズが約18GBのSQL Serverデータベースを更新する必要がありますNVARCHAR(MAX)。
私が抱えている問題は、すべてのalter tableコマンドを実行した後、データベースのサイズがほぼ26GBになることです。ここから使用NVARCHAR(MAX)するとDBの成長が遅くなることを理解していますが、この肥大化を防ぐ方法はありますか?
かなりの数のTEXT列をに変更するには、サイズが約18GBのSQL Serverデータベースを更新する必要がありますNVARCHAR(MAX)。
私が抱えている問題は、すべてのalter tableコマンドを実行した後、データベースのサイズがほぼ26GBになることです。ここから使用NVARCHAR(MAX)するとDBの成長が遅くなることを理解していますが、この肥大化を防ぐ方法はありますか?
回答:
この投稿がお役に立てば幸いです。
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
重要な事実:
列をTEXT / NTEXTからNVARCHAR(MAX)に変更しても、データの格納方法は変更されず、テーブルのメタデータのみが更新されます。データ構造は、次に値が変更されたときにのみ変更されます。これは、次のようなものを実行することですぐに実行できます。
update mytable set mycolumn1 = mycolumn1NVARCHAR(MAX)のデフォルトのテーブルオプション設定を使用すると、テーブルのデータが大きくなります。
-必要に応じて設定を変更する前に、テーブルオプションの設定と環境を確認する必要があります。
update tableステートメントを使用してalter tableステートメントを実行すると、最終的にテーブルサイズが縮小します。
つまり、更新ステートメントを実行してデータ構造のストレージを強制的に変更すると、データベースサイズは予想どおり小さくなります。
編集:NTEXTではなくTEXTについて述べたように、スペースの増加は思っているよりも明白ではありません。NTEXTはTEXTの2倍のスペースを使用しますが、同時に、NVARCHAR(MAX)がNTEXTの約半分のスペースを占めることを期待する必要があります。私の計算では、元のデータベースのサイズからほとんど変化がありません。
http://www.douglubey.com/への特別なクレジット
あなたの質問の見落としかもしれませんが、あなたはNTEXTからNVARCHAR(max)ではなくTEXTからNVARCHAR(max)と言っています。これが実際に行っていることであれば、ANSIからUNICODEに変更しているため、スペースが増えることに驚かないでください(シングルバイト文字とマルチバイト文字の比較)。
TEXTフィールドのサイズだけ増加する必要があります。Unicodeに移行するには、ANSIのストレージスペースのちょうど2倍のスペースが必要です。