質問

どのようにMySQLはvarchar型のフィールドを格納していますか?私は、次のパターンは、賢明なストレージ・サイズを表していると仮定することができます:

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

例介し明確。私は20文字のvarchar型のフィールドを持って言うことができます。 MySQLはこのフィールドを作成するときに、基本的には(彼らはバイトしているかどうないように注意してください)32バイトのためのスペースを確保するだけで20を入力できるようにしていますか?

私は大規模なテーブル用のディスク領域を最適化する心配ですね。

役に立ちましたか?

解決

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

他のヒント

MySQLは1バイトまたはレコードサイズを示すための2つのバイトのプレフィックスのいずれかで、可変長レコードとしてVARCHARフィールドを格納する。

ストレージサイズのパターンを持つことは本当に可変長レコード記憶を扱うとき、MySQLはどのように機能するかに任意の違いはありません。 VARCHAR(x)の宣言で指定された長さは、単純に格納できるデータの最大長を決定します。基本的に、VARCHAR(16)は、別のディスク・ワイズVARCHAR(128)を超えていない。

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

編集:あなたの更新の質問に関しては、答えはまだ同じです。 varchar型のフィールドは、あなたがそれ(プラス1または2バイトのオーバーヘッド)に格納するデータとして、ディスク上のように多くのスペースを使用します。あなたはその中の10文字の文字列を格納する場合、あなただけの10バイトを使用するつもりだ、VARCHAR(16)またはvarchar(128)を持っているのであれば、それは問題ではありません(プラス1または2)のディスクスペースます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top