1

ドキュメントにあるように、mysql は varchar に指定した全領域を割り当てません。データの実際の長さを格納します。そのため、副作用の可能性もあると思います。varchar レコードの元の長さが 10 の場合のように、指定された制限 50 にまだ達していない 20 に更新したいと思います。しかし、以前に割り当てられたスペースは現在十分ではありません。私の質問は、MySQL がこのような状況にどのように対処するかです。そのレコードに続いてすべてを移動するには時間がかかりますか? それともそれをしなければなりませんか?内部でどのように機能するか教えてくれる人はいますか?前もって感謝します!

4

1 に答える 1

1

MySQL はそれを十分に処理し、詳細を気にする必要はありません。不規則な長さのレコードは、固定長のレコードよりも管理に多少時間がかかりますが、通常、レコードが固定サイズよりも小さい場合は、読み取るデータが大幅に少なくなるため、パフォーマンスが大幅に向上します。

CHAR列は常に最大サイズで格納および取得されることに注意してください。255 文字のフィールドでは、平均的なレコードに 10 ~ 15 バイトのデータしかない場合でも、255 バイトを転送する必要があります。これはかなりの量のオーバーヘッドです。

フィールドは常にその長さになるため、使用CHARすると他の多くの問題が発生します。つまり、フィールド全体を転送し、通常はクライアントで削除する必要があります。これは、価値があるよりもはるかに面倒です。

列の現代における唯一の用途は、CHAR常に定義され、常に特定のサイズになるものです。一例として、識別子として使用される 40 文字の 16 進数のハッシュが挙げられますが、これらは通常はまれであり、ほぼすべてのケースでVARCHAR同様に機能します。

于 2012-07-18T20:33:10.790 に答える