web-dev-qa-db-ja.com

MySQLの最適なvarcharサイズは何ですか?

MySQLはどのようにvarcharフィールドを保存しますか?次のパターンが適切なストレージサイズを表すと仮定できますか?

1,2,4,8,16,32,64,128,255(最大)

例による説明。 20文字のvarcharフィールドがあるとします。 MySQLはこのフィールドを作成するときに、基本的に32バイトのスペースを予約します(バイトかどうかはわかりません)が、20だけを入力できますか?

大規模なテーブルのディスク領域を最適化するのが心配だと思います。

65
ae.

質問に答えるために、MySqlはディスク上で1 +フィールドで使用されるサイズを使用してデータを格納します(したがって、列がvarchar(45)として宣言され、フィールドが "FooBar"の場合、ディスク上の7バイトを使用します。もちろん、マルチバイト文字セットを使用する場合、14バイトを使用する場合を除きます)。したがって、列をどのように宣言しても、ストレージ側で違いは生じません(大規模なテーブルのディスク最適化について心配していると述べました)。ただし、MySQLが一時テーブル(SORT、ORDERなど)を作成するときにVARCHARがCHARに変換され、1ページに収まるレコードが多いほど、メモリが少なくなり、テーブルスキャンが高速になるため、クエリに違いが生じます。である。

55
Kris Erickson

MySQLは、可変長レコードとしてvarcharフィールドを保存し、レコードサイズを示す1バイトまたは2バイトのプレフィックスを付けます。

ストレージサイズのパターンを持っているからといって、可変長レコードストレージを扱うときのMySQLの機能に実際の違いはありません。 varchar(x)宣言で指定された長さは、格納できるデータの最大長を単に決定します。基本的に、varchar(16)はvarchar(128)とディスク単位で違いはありません。

このマニュアルページ にはさらに詳細な説明があります。

編集:更新された質問に関しては、答えは同じです。 varcharフィールドは、ディスクに保存するデータと同じ容量(および1バイトまたは2バイトのオーバーヘッド)だけをディスク上で使用します。したがって、varchar(16)またはvarchar(128)があるかどうかは関係ありません。10文字の文字列を格納する場合は、10バイト(プラス1または2)のディスクスペースしか使用しません。 。

24
zombat