2011-09-06 3 views
21

すべてのエントリが中規模サイズのフィールドに収まるときに、MySQLのlongtextサイズのフィールドを使用することにはどのような欠点がありますか?すべてのエントリが中規模サイズのフィールドに収まるときに、MySQLのlongtextサイズのフィールドを使用することにはどのような欠点がありますか?

私はいくつかのロングテキストサイズのフィールドがあり、最近大きくなっていることを最近認識していますが、「何が害でしょうか」という理由で分の変更を行うよう動機づけに苦労しました。それゆえの質問です。

答えて

29

唯一のストレージサイズの違いは、「この分野でどのように多くのバイト」数に割り当てられたバイト数であるMEDIUMTEXTして比較します。 fine manualから:

TINYTEXT L + 1 bytes, where L < 2^8 
TEXT  L + 2 bytes, where L < 2^16 
MEDIUMTEXT L + 3 bytes, where L < 2^24 
LONGTEXT L + 4 bytes, where L < 2^32 

のでlongtextは同じテキストを保存するためにmediumtextより1つの多くのバイトを使用します。このマニュアルのData Type Storage Requirementsセクションにはさらに詳しい情報があり、The BLOB and TEXT Typesセクションにはさらに詳しい情報があります。

4つのTEXTタイプには実質的な違いはありません。

+3

これは私が想定していたものです。実際の唯一の違いは、1行に1バイトの余分なスペースを使用することです。あれは正しいですか?もしそうなら、なぜ私はlongtext以外のフィールドオプションがあるのか​​想像できませんか? – darkAsPitch

+2

@ darkAsPitch:AFAIKは、余分な1バイトが唯一の違いです。歴史的な理由からおそらく4つのタイプがあります。 –

2

Mysqlは、クエリを実行するために一時テーブルを頻繁に使用します。 大きなサイズのフィールドを持つことの欠点は、MySqlがその列のために十分なスペースを確保することです。

あなたはLONG​​TEXTでマークされ、その列を持っている場合は、同じデータを持つ遅い実行を持つことになりますが

+1

しかし、MySQLのmediumtext列型とlongtext列型は可変長ですが、唯一の違いは列サイズに割り当てられたバイト数だけです。 –

+0

内部的な一時テーブルが最初にメモリ内テーブルとして作成されても大きすぎると、MySQLは自動的にそれをディスク上のテーブルに変換します。 http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html – Jerem

+3

LONGTEXTは4 GBです。 Mysqlは、LONGTEXT列がクエリに含まれている場合、一時テーブルに4 GBの領域(行ごと)を確保しますか?それは、数行以上が関わっているときにはうまくいかないようです。 – sandinmyjoints

関連する問題