varchar(255)対tinytext / tinyblobおよびvarchar(65535)対blob / text


91

定義により:

VARCHAR:長さの範囲は1〜255文字です。VARCHAR値は、BINARYキーワードが指定されていない限り、大文字と小文字を区別しない方法で並べ替えられ、比較されます。x + 1バイト
TINYBLOB、TINYTEXT:最大長が255(2 ^ 8-1)文字のBLOBまたはTEXT列x + 1バイト

これに基づいて、次の表を作成します。

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

または、varcharまたはtinytextを作成する方が良いですか、なぜですか?

それは同じですか?

VARCHAR:長さの範囲は> 255文字です。BINARYキーワードが指定されていない限り、VARCHAR値は大文字と小文字を区別しない方法で並べ替えられ、比較されます。x + 2バイト
BLOB、TEXT最大長が65535(2 ^ 16-1)文字のBLOBまたはTEXT列x + 2バイト


VARCHARは必要なメモリオーバーヘッドが少なくなりますが、通常はメモリで完全に読み取られるため、最後にVARCHARがさらに多くのメモリを使用する可能性があります。どちらも違います。BLOBを使用して、画像、オーディオ、その他のマルチメディアデータなどのバイナリデータを格納します。VARCHARは、制限までの任意のサイズのテキストを格納します。
ゼウス書

回答:


10

この場合varcharはより良いです。

varchar1〜65535文字であることができます。

VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前は0〜255、5.0.3以降のバージョンでは0〜65,535の値として指定できます。MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(すべての列で共有される65,535バイト)と使用される文字セットの影響を受けます。セクションE.7.4「テーブルの列数と行サイズの制限」を参照してください。

ブロブはファイルの別のセクションに保存されます。
データに含めるには、追加のファイル読み取りが必要です。
このため、varcharはより高速にフェッチされます。

頻繁にアクセスしない大きなblobがある場合、blobよりも理にかなっています。
blobデータを別の(の一部)ファイルに格納すると、コアデータファイルを小さくして、すばやくフェッチできます。


これがより良いかどうかは、データアクセスパターンによって異なります。
Michael

1
それはどの個別のファイルですか?
glglgl

1
Blobは別のファイルに保存されません。ただし、他の列とは別の物理的な場所に格納されます。
Michael Mior

1
これは、アクセス頻度だけでなく、データに対して実行されている操作にも依存することに注意してください。たとえば、テキストの列ではなくテーブルスキャンを必要とするが、テキストの列を必要としないクエリは、スキャンされるデータの量が増えることにより、パフォーマンスが低下します。
Michael Mior

1
また、クエリオプティマイザーがこのデータをプルしないほどスマートであるかどうかはわかりませんが、データがページ外に格納されている場合は、この列を使用しないfilesortsの方が効率的かもしれません。
Michael Mior
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.