sql >> データベース >  >> RDS >> Mysql

MySQL行フォーマット:固定と動的の違いは?

    違いは実際にはMyISAMにのみ関係し、他のストレージエンジンは違いを気にしません。編集: 多くのユーザーは、InnoDBが気にかけているとコメントしています:リンク1蒸気動力リンク2byKaan

    固定幅の行を持つMyISAMには、いくつかの利点があります。

    1. 行の断片化なし:可変幅の行を使用すると、データファイル全体で単一の行を複数のセクションに分割できます。これにより、ディスクシークが増加し、操作が遅くなる可能性があります。 OPTIMIZE TABLEを使用してデフラグすることは可能ですが、これが常に実用的であるとは限りません。

    2. データファイルポインタのサイズ:MyISAMには、データファイルを参照する必要がある場合に使用されるデータファイルポインタの概念があります。たとえば、これは、行が実際に存在する場所を参照するときにインデックスで使用されます。固定幅サイズの場合、このポインターはファイル内の行オフセットに基づいています(つまり、行はサイズに関係なく1、2、3です)。可変幅の場合、ポインタはバイトオフセットに基づいています(つまり、行は1、57、163の場合があります)。その結果、テーブルが大きい場合、ポインタを大きくする必要があります。これにより、テーブルのオーバーヘッドが大幅に増える可能性があります。

    3. 破損した場合の修正が簡単です。すべての行が同じサイズであるため、MyISAMテーブルが破損した場合、修復がはるかに簡単になり、実際に破損したデータのみが失われます。可変幅を使用すると、理論的には可変幅ポインターが混乱する可能性があり、その結果、データが不適切に表示される可能性があります。

    現在、固定幅の主な欠点は、より多くのスペースを浪費することです。たとえば、VARCHARフィールドの代わりにCHARフィールドを使用する必要があるため、余分なスペースが必要になります。

    通常、フォーマットはスキーマに基づいて決定されるため、フォーマットの選択肢はあまりありません。ただし、これに向けて最適化を試みるために、varcharが数個またはblob/テキストが1つしかない場合は価値があるかもしれません。たとえば、唯一のvarcharをcharに切り替えるか、blobを独自のテーブルに分割することを検討してください。

    これについては、次のURLでさらに読むことができます:

    http://dev.mysql.com/doc/refman /5.0/en/static-format.html

    http://dev.mysql.com/doc/refman /5.0/en/dynamic-format.html



    1. ユーザー名が存在するかどうかを確認するPDO

    2. グループごとに1列の最大値を持つ行を返します

    3. Sequelize:WHERELIKE句のフィールドを連結します

    4. MySql.ConnectorNET.DataとMySql.Data