1. ホーム
  2. sql-server

[解決済み】SQL Serverでvarchar(MAX)とTEXTを使い分ける。

2022-05-01 21:45:51

質問

今読んだのですが VARCHAR(MAX) データ型(2GB近いcharデータを格納できる)が TEXT データ型は、SQL Server 2005 および次の SQL SERVER バージョンで使用できます。

あるカラムの内部で任意の文字列を検索したい場合、どちらの操作が速いですか?

  1. を使用すると LIKE 節に対して VARCHAR(MAX) カラム?

    WHERE COL1 LIKE '%search string%'

  2. を使用しています。 TEXT の列を作り、そこに 全文インデックス / カタログ をこのカラムに追加し、そのカラムを使用して検索します。 CONTAINS 節は?

    WHERE CONTAINS (Col1, 'MyToken')

解決方法は?

その VARCHAR(MAX) タイプは TEXT . 基本的な違いは TEXT 型は常に blob にデータを格納するのに対して VARCHAR(MAX) タイプは、データが8kの制限を超えない限り、データを直接行に格納しようとし、その時点でblobに格納します。

LIKE文の使用方法は、2つのデータ型の間で同じです。追加機能である VARCHAR(MAX) と一緒に使用することができます。 =GROUP BY を他の VARCHAR カラムにすることができます。しかし、多くのデータを持っている場合、これらの方法を使用すると、大きなパフォーマンスの問題が発生します。

を使うべきかどうかについては LIKE を使って検索するか、それとも フルテキストインデックス CONTAINS . この質問は VARCHAR(MAX) または TEXT .

大量のテキストを検索する場合、パフォーマンスが重要な場合は フルテキストインデックス .

LIKE は実装が簡単で、少量のデータには適していることが多いですが、インデックスを使用できないため、大きなデータではパフォーマンスが極端に悪くなります。