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