SQL Server でテキスト フィールドを使用する方が適切になる前に、nvarchar フィールドはどのくらいの長さである必要がありますか? クエリが実行される場合と実行されない場合があるテキスト コンテンツに対して、どちらか一方を使用するための一般的な指標は何ですか?
3 に答える
私が理解していることから、TEXT
データ型は SQL 2005 以降では使用しないでください。VARCHAR(MAX)
代わりに使用を開始する必要があります。
対に関するこの質問を参照してください。VARCHAR(MAX)
TEXT
更新(コメントごと):
このブログは、利点を説明するのに適しています。それから取られた:
しかし、型テキストに対してクエリを実行しようとすると、型テキストを使用することによる苦痛が生じます。たとえば、テキスト タイプによるグループ化はできません。
テキスト型を使用することのもう 1 つの欠点は、各レコードが BLOB (またはファイル) を指すようになったため、ディスク IO が増加することです。
したがって、基本的にはデータをレコードとともに保持し、文字列関数 ( 、など)を使用するなど、他のタイプのVARCHAR(MAX)
ように扱うことができます。VARCHAR
GROUP BY
LEN
CHARINDEX
の場合TEXT
、ほとんどの場合、それVARCHAR
に対して関数を使用するには、 に変換する必要があります。
TEXT
しかし、効率に関するあなたの質問の根本に戻ると、対を使用する方が効率的だとは思いませんVARCHAR(MAX)
。この MSDN の記事(「データ型」を検索) を見ると、TEXT
非推奨であり、VARCHAR(MAX) に置き換える必要があります。
まず、テキストをまったく使用しないでください。MSDN は次のように述べています。
ntext、text、および image データ型は、Microsoft SQL Server の将来のバージョンで削除される予定です。新しい開発作業でこれらのデータ型を使用することは避け、現在それらを使用しているアプリケーションを変更することを計画してください。代わりに、nvarchar(max)、varchar(max)、および varbinary(max) を使用してください。
varchar(max) が必要になる場合があります。
varchar(n) と varchar(max) を比較すると、これらは技術的には 2 つの異なるデータ型です (格納方法が異なります)。
varchar(n) 値は常に行内に格納されます。つまり、最大行サイズを超えることはできず、行はページ サイズ (8K) を超えることはできません。
varchar(max) は行のサイズを超えて格納されます。行には、別の BLOB ページへのポインターがあります。ただし、特定の条件下では、 varchar(max) はデータを通常の行として格納できます。明らかに、少なくとも行サイズに収まる必要があります。
したがって、行が 8K を超える可能性がある場合は、varchar(max) を使用する必要があります。そうでない場合は、varchar(n) を使用する方が、ページ外から行内データを取得するよりも高速であるため、おそらく望ましいでしょう。
列データ エントリのサイズが大きく異なり、サイズが 8,000 バイトを超える可能性がある場合は、varchar(max) を使用します。
TEXTに対するVARCHARの主な利点は、文字列操作と文字列関数を実行できることです。VARCHAR(max)を使用すると、基本的に、必要に応じて操作できる非常に大きな(制限のない)変数が得られます。