26

ここで大規模な低速 SQL クエリのリファクタリングについて読んでいましたが、現在の最高の応答は、クエリが主要な選択にインデックスを使用していることを確認したい Mitch Wheat からのもので、次のように言及しています。

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

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

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

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

4

3 に答える 3

24

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

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

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

于 2008-11-26T18:11:24.857 に答える
11

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

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

于 2008-11-26T18:03:18.167 に答える
1

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

于 2008-12-10T05:04:31.447 に答える