質問

MySQLを指定行フォーマットのテーブルとして固定または動的に応じて、列データタイプ。した場合には、可変長カラムはカラムデータタイプなどのテキストまたはVARCHAR、行フォーマットはダイナミック;それ以外の場合の修正。

がこの質問にびっくりするの違いについて教えてくださいに行ォ?はより効率的に。

役に立ちましたか?

解決

違いは本当にMyISAMにのみ関係し、他のストレージエンジンは違いを気にしません。 編集:多くのユーザーは、InnoDBが重要だとコメントしました: steampoweredによるリンク1 Kaanによるリンク2

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

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

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

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

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

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

これについては、以下でさらに読むことができます:

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

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

他のヒント

一方の鍵で差額が発生したときに更新します。場合、行フォーマットを設定し、変更はありませんの長さです。一方の場合、行フォーマットは動的に新しいデータの記録は増加長さのリンクを使用の"オーバーフロー"データ(その名のオーバーフローポインタ.

この断片の表は、一般的に遅くする。あるコマンドdefragment(最適化のテーブルも軽減されます。

MySQLのドキュメントのこのページは、ここでの一番の答えと矛盾しているようです。というのは、DYNAMIC行形式はInnoDBテーブルにも何かを意味するからです。

http://dev.mysql.com/doc/innodb /1.1/en/innodb-row-format-dynamic.html

固定とは、すべての行がまったく同じサイズであることを意味します。つまり、データページの3行目を読み込む必要がある場合、PageHeader + 2 * RowSizeになり、アクセス時間が節約されます。

ダイナミックレコードの先頭を見つけるには、レコードオフセットのリストを参照する必要があります。これには、追加の間接参照が含まれます。

要するに、はい、動的行のパフォーマンスがわずかに低下します。いいえ、それほど大きなものではありません。問題になると思われる場合は、テストしてください。

fixedは、動的よりも高速で安全である必要がありますが、固定文字長を持っているという欠点があります。 この情報はここで見つけることができます: http://dev.mysql .com / doc / refman / 5.0 / en / static-format.html

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