1

SQL Server でテキスト フィールドを使用する方が適切になる前に、nvarchar フィールドはどのくらいの長さである必要がありますか? クエリが実行される場合と実行されない場合があるテキスト コンテンツに対して、どちらか一方を使用するための一般的な指標は何ですか?

4

3 に答える 3

7

私が理解していることから、TEXTデータ型は SQL 2005 以降では使用しないでください。VARCHAR(MAX)代わりに使用を開始する必要があります。

対に関するこの質問を参照してください。VARCHAR(MAX)TEXT

更新(コメントごと):

このブログは、利点を説明するのに適しています。それから取られた:

しかし、型テキストに対してクエリを実行しようとすると、型テキストを使用することによる苦痛が生じます。たとえば、テキスト タイプによるグループ化はできません。

テキスト型を使用することのもう 1 つの欠点は、各レコードが BLOB (またはファイル) を指すようになったため、ディスク IO が増加することです。

したがって、基本的にはデータをレコードとともに保持し、文字列関数 ( 、など)を使用するなど、他のタイプのVARCHAR(MAX)ように扱うことができます。VARCHARGROUP BYLENCHARINDEX

の場合TEXT、ほとんどの場合、それVARCHARに対して関数を使用するには、 に変換する必要があります。

TEXTしかし、効率に関するあなたの質問の根本に戻ると、対を使用する方が効率的だとは思いませんVARCHAR(MAX)この MSDN の記事(「データ型」を検索) を見ると、TEXT非推奨であり、VARCHAR(MAX) に置き換える必要があります。

于 2011-05-12T03:44:33.150 に答える
3

まず、テキストをまったく使用しないでください。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) を使用する方が、ページ外から行内データを取得するよりも高速であるため、おそらく望ましいでしょう。

MSDN は次のように述べています

列データ エントリのサイズが大きく異なり、サイズが 8,000 バイトを超える可能性がある場合は、varchar(max) を使用します。

于 2011-05-12T04:13:15.990 に答える
1

TEXTに対するVARCHARの主な利点は、文字列操作と文字列関数を実行できることです。VARCHAR(max)を使用すると、基本的に、必要に応じて操作できる非常に大きな(制限のない)変数が得られます。

于 2011-05-12T03:50:08.437 に答える