データベースインデックスはいつ再構築する必要がありますか?

StackOverflow https://stackoverflow.com/questions/321461

  •  11-07-2019
  •  | 
  •  

質問

ここおよび現在の最高レベルでの、大規模で遅いSQLクエリのリファクタリングについて読んでいました回答はMitch Wheatからです。MitchWheatは、クエリが主要な選択と言及についてインデックスを使用していることを確認したいと考えています。

  

最初に行うことは、定期的に実行されているアクティブなインデックスメンテナンスジョブがあることを確認することです。そうでない場合は、既存のインデックスをすべて再構築するか、不可能な場合は少なくとも統計を更新します。

私はアマチュアDBAのみで、基本的にJavaデスクトップクライアントであり、場合によってはMySQLバックエンドであるフリーランスプログラムをいくつか作成しました。システムをセットアップすると、クエリ対象の列にインデックスを作成することがわかります。varcharCaseIDとvarchar CustNameがあります。

しかし、私はこのシステムを数か月前に設定し、クライアントを動作させたままにしており、データが入力されるとインデックスが大きくなり、すべてがまだうまく機能していると思います。インデックスは定期的に再構築する必要があるのではないかと心配しています。なぜなら、今日は「アクティブなメンテナンスジョブ」があるはずだと読んだからです。モノに設定したメンテナンスジョブは、毎晩のバックアップのみでした。

データベースに必要な定期的なメンテナンスについてコミュニティに尋ねたいと思いました。インデックスを再構築する必要はありますか? MySQLバックエンドが誰も混乱せず、データが数ギガバイト未満に留まる限り、MySQLバックエンドを信頼し続けることができますか?

役に立ちましたか?

解決

インデックスを「再構築」する必要はありません。それらは常に最新の状態に保たれます。たぶん彼はテーブルの再構築について言及していました。使用パターンとスキーマに応じて、InnoDBで断片化されたページを取得できます。MyISAMでも同様です。テーブルを再構築すると、ディスク上のデータの断片化が解消されるため、パフォーマンスが向上します。私は定期的にMyISAMテーブルを使用しませんが、特定の使用パターンで「OPTIMIZE TABLE」を実行することをお勧めします。適切な情報については、 OPTIMIZE TABLE のMySQLドキュメントを参照してください。 MyISAMとInnoDBの両方で。

MyISAMの複雑さにあまり詳しくありませんが、InnoDBでは統計が古くなる可能性があるのは事実です。データベースは、指定されたインデックスに対するデータの分散方法に関する推定統計を保持し、それらが古くなる可能性がありますが、MySQL / InnoDBには統計を最新に保つための機能が組み込まれています。通常、心配する必要はありません。

したがって、InnoDBを使用している場合、答えは「いいえ」です。通常、インデックスのパフォーマンスを維持するために積極的に何もする必要はありません。 MyISAMについては確信が持てません。これらのテーブルを定期的に最適化する必要があるのが一般的だと思います。

他のヒント

通常、インデックスを最適化してエラーをチェックするには、cronジョブを設定することをお勧めします。

mysqlcheck を参照してください。典型的なcronジョブは mysqlcheck -Aaos のようなもので、すべてのデータベースのすべてのテーブルのエラーをチェックし、インデックスを最適化し、エラー時にのみ出力します。

「定期的なメンテナンス」についてリンクした回答切り捨てられて定期的に再配置される一時テーブルの特定のコンテキストにありました。 MySQLデータベースのインストールの大部分に対してこれを行う必要はありません。

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