データベース:“ TEXT” “ varchar&#8221 ;?
-
03-07-2019 - |
質問
SQLデータベースでvarcharよりもTEXTを使用する方が効率的ですか?
もしそうならなぜですか?
そうでない場合、なぜ単にTEXTを使用しないのですか?
ここでは特定のデータベースを対象とはしていませんが、おそらくoracleが最も関連性がありますが、当面は概念実証の一環としてMySQLでテストします。
解決
Microsoft こちら
からntext、text、およびimageデータ型は の将来のバージョンで削除される Microsoft SQL Server。使用を避ける 新規開発のこれらのデータ型 動作し、アプリケーションを変更する計画 現在それらを使用しています。つかいます nvarchar(max)、varchar(max)、および 代わりにvarbinary(max)。
テキストに対して varchar(max)
を使用すると、 WHERE
句で使用できます。これらは、対応する小さい方の varchar、 nvarcharおよびvarbinary
。以下は、使用されるべきものとは対照的に、使用されるべきものの小さなリストです。
- テキストの代わりにvarchar(max)を使用
- ntextの代わりにnvarchar(max)を使用
- 画像の代わりにvarbinary(max)を使用
他のヒント
ヒント:これらの3つのタイプの間にパフォーマンスの違いはありません。ただし、空白が埋め込まれたタイプを使用する場合のストレージサイズの増加、および長さ制限のあるカラムに格納する場合の長さをチェックするための余分なサイクルは除きます。 character(n)は他のデータベースシステムではパフォーマンス上の利点がありますが、PostgreSQLではそのような利点はありません。ほとんどの場合、代わりにテキストまたは文字可変を使用する必要があります。
簡単な答えは、はい、効率は劣ります。
より長く複雑な答えは次のとおりです。
はい、それらはおそらくあまり効率的ではありません。使用しているDBMSやテーブルのサイズなどに依存します。TEXTフィールドは可変幅であるため、DBMSはレコードを検索する際により多くの作業を行う必要があります。これがパフォーマンスに与える影響は、DBMSの一般的な効率性、テーブルの行に関して格納するデータの量、および固定長のテーブルを最適化するかどうかに直接比例します。
MySQLは固定長のテーブル行でより速く動作しますが、最初にテーブルを固定長のテーブルとして扱うことができることを伝えなければなりません。私は実際に他のDBMSで実際の数値を関連付けることができる実際的な経験はありません。しかし、大量のレコード(数百万以上のレコード)を持つテーブルでは、大きな違いが生じる可能性があります。ただし、テーブルが小さいほど実用的な違いはほとんどありません。
話しているデータベースを具体的に特定する必要があります。少なくともいくつかのデータベースでは、TEXTはテーブル自体(参照のみを含む)とは別のCLOBとして格納されています。これにより、テーブルは小さくなります(良い)が、余分なルックアップとおそらくフェッチ時にキャッシュミス(悪い)になります。
おそらくインデックス付けとクエリへの影響もありますが、これも使用している特定のRDBMSに依存します。