web-dev-qa-db-ja.com

MySQLで「オーバーヘッド」とは何を意味し、何が悪いのか、どのように修正するのか?

簡単な質問ですが、それはしばらくの間私を悩ませていました。

mySQLの「オーバーヘッド」とは何ですか。心配する必要がありますか?

「テーブルの最適化」をクリックすると、実際に修正されますか?

149
johnnietheblack

オーバーヘッドは、データベースがクエリの一部を実行するために使用した一時的なディスク領域であるように見えるため、これが本当に大きくなった場合にのみ心配する必要があります。

「テーブルの最適化」とハードドライブの最適化を比較できます。

引用:

すべてのデータベースは、時間の経過とともに、パフォーマンスを最適に保つために何らかの形のメンテナンスが必要になります。削除された行の削除、再順序付け、圧縮、インデックスパスの管理、デフラグなどは、mysqlではOPTIMIZATIONと呼ばれ、他のデータベースでは他の用語で知られています。たとえば、IBM DB2/400は、REORGANIZE PHYSICAL FILE MEMBERと呼びます。

車のオイルを交換したり、チューンアップをしたりするようなものです。本当にそうする必要はないと思うかもしれませんが、そうすることであなたの車はずっと良く走り、より良い燃費を得ることができます。頻繁に使用されるデータベースにも同じものが必要です。多数のUPDATEおよび/またはDELETE操作を実行している場合、特にテーブルに可変長列(VARCHAR、TEXTなど)がある場合は、引き続き調整する必要があります。

141
Jasper

phpMyAdminoverheadを呼び出すことについて話している場合、それは同じデータファイルの理想的なサイズに対するテーブルデータファイルの実際のサイズです(バックアップから復元されたときのように)。

パフォーマンス上の理由から、MySQLは、行を削除または更新した後、データファイルを圧縮しません。

このoverheadは、テーブルスキャンには不適切です。 e。クエリをすべてのテーブル値で実行する必要がある場合、より多くの空きスペースを調べる必要があります。

テーブルとインデックスを圧縮するOPTIMIZE TABLEを実行すると、overheadを削除できます。

79
Quassnoi

オーバーヘッドは、テーブルのData_free、つまり割り当てられているが未使用のバイト数 SQLコマンドSHOW TABLE STATUSで確認できます。テーブルに割り当てられたサイズの空き領域です。

7

テーブルの最適化には非常に問題があります。たとえば、テーブルがサイトで頻繁に使用されている場合。

http://dev.mysql.com/doc/refman/5.1/en/optimize-table.html

MyISAMまたはARCHIVEテーブルの大部分を削除した後、または可変長行(VARCHAR、VARBINARY、BLOB、またはTEXT列を持つテーブル)を含むMyISAMまたはARCHIVEテーブルに多くの変更を加えた後。削除された行はリンクリストで維持され、後続のINSERT操作は古い行の位置を再利用します。<

私はこの振る舞いを確認したと信じています。そして、それは確かに非常に有用です。