可変長文字データがあり、SQL Server(2005)データベースに格納したい。 TEXT SQL型の選択方法やVARCHAR SQL型の選択方法、パフォーマンス/フットプリント/機能の長所と短所についてのベストプラクティスをいくつか学びたいと思います。
SQL Server 2005以降を使用している場合は、varchar(MAX)
を使用してください。 text
データ型は推奨されていないため、新しい開発作業には使用しないでください。ドキュメントから:
重要
ntext
、text
、およびimage
のデータタイプは将来削除される予定です。 Microsoft SQL Serverのバージョン。これらのデータ型を新しい開発作業で使用することを避け、現在それらを使用しているアプリケーションを変更することを計画してください。代わりに nvarchar(max) 、 varchar(max) 、および varbinary(max) を使用してください。
TEXT
は、大量の文字列データに使用されます。フィールドの長さが特定のしきい値を超えた場合、テキストは行外に格納されます。
VARCHAR
は常に行に格納され、80文字の制限があります。 VARCHAR(x)
を作成しようとすると、x> 80の場合、エラーになります。
サーバー:メッセージ131、レベル15、状態3、行1
型「varchar」に指定されたサイズ()が、任意のデータ型に許可されている最大値(8000)を超えています
これらの長さの制限は、SQL Server 2005内のVARCHAR(MAX)
には関係ありません。これは、TEXT
のように、行外に格納される可能性があります。
MAX
はここでは一種の定数ではないことに注意してください。VARCHAR
とVARCHAR(MAX)
は非常に異なる型で、後者はTEXT
に非常に近いものです。
以前のバージョンのSQL Serverでは、TEXT
に直接アクセスすることはできませんでした。TEXTPTR
を取得し、それをREADTEXT
およびWRITETEXT
関数でのみ使用できました。
SQL Server 2005では、TEXT
列に直接アクセスできます(ただし、それらに値を割り当てるにはVARCHAR
への明示的なキャストが必要です)。
TEXT
は良いです:
VARCHAR
は良いです:
ここで選択とは、列の値を返すクエリを発行するという意味です。
ここで検索とは、結果がTEXT
またはVARCHAR
列の値に依存するクエリをすべて発行することを意味します。これには、任意のJOIN
またはWHERE
条件での使用も含まれます。
TEXT
は行外に格納されているため、TEXT
列を含まないクエリは通常高速です。
TEXT
が何に適しているかの例をいくつか示します。
VARCHAR
が何に適しているかの例をいくつか示します。
経験則として、2文字およびを超えるテキスト値が必要な場合は、この列で結合を使用しないで、TEXT
を使用してください。
それ以外の場合はVARCHAR
を使用してください。
P.S.同じことがUNICODE
が有効なNTEXT
とNVARCHAR
にも当てはまります。これらは上記の例で使用する必要があります。
P.P.S.SQL Server 2005+がTEXT
およびNTEXT
の代わりに使用するVARCHAR(MAX)
およびNVARCHAR(MAX)
にも同じことが当てはまります。それらを常に行外に格納したい場合は、large value types out of row
でそれらのsp_tableoption
を有効にする必要があります。
上記のように ここで 、TEXT
は将来のリリースで推奨されなくなります。
text in row
オプションは、将来のバージョンの{SQL Serverで削除される予定です。新しい開発作業ではこのオプションを使用しないでください。現在text in row
を使用しているアプリケーションを変更することを計画してください。varchar(max)
、nvarchar(max)
、またはvarbinary(max)
データ型を使用して大きなデータを格納することをお勧めします。これらのデータ型の行内および行外の動作を制御するには、large value types out of row
オプションを使用します。
SQL Server 2005では、varchar(max)
とnvarchar(max)
という新しいデータ型が導入されました。これらは古いテキスト型の利点を持っています。2GBのデータを格納できますが、varchar
とnvarchar
の利点もほとんどあります。これらの利点の中にはsubstring()のような文字列操作関数を使う能力があります。
また、サイズが8 KB未満の間、varchar(max)はテーブルの(ディスク/メモリ)スペースに格納されます。フィールドにさらにデータを配置した場合にのみ、そのデータはテーブルのスペース外に格納されます。表のスペースに格納されているデータは(通常は)より早く取り出されます。
手短に言えば、より良い代替手段があるので、決してTextを使わないでください:(n)varchar(max)。そして、通常のvarcharが十分に大きくない場合、すなわち、格納しようとしている文字列が8000文字を超えると予想される場合にのみ、varchar(max)を使用してください。
すでに述べたように、TEXTデータ型にSUBSTRINGを使用できますが、TEXTフィールドの長さが8000文字未満の場合に限られます。
Ms 2008にはいくつかの大きな変更がありました - >どのデータ型を使うべきかについて決定するとき次の記事を考慮する価値があるかもしれません。 http://msdn.Microsoft.com/ja-jp/library/ms143432.aspx
1バイトあたり