2016-03-30 14 views
0

私は最適化に関する質問があります。最適化:大きなMySQLテーブル、最近使用されたレコードのみ

私が最近作業を開始したPHP Webアプリケーションには、MySQLデータベースにいくつかの大きなデータベーステーブルがあります。この表の情報は、ビジネス目的で常にアクセス可能である必要があります。その結果、最終的には実際に大きく成長します。

テーブルは定期的に書き込まれ、最近のレコードは頻繁に選択されます。

以前の開発者は、システムを最適化する非常に奇妙な方法を考え出しました。彼らはレコードが "古い"(24時間以上経過)になったら、テーブルをコンパクトに保ち、テーブルを同期させるために最近のレコードを格納するデータベースを別々に作成しました。

SELECTクエリを実行するときに、アプリケーションは現在の日付を使用して正しいデータベースを選択します。

これは私の意見では非常に奇妙な解決策です。私たちはそれについて大きな議論を持ちました。私はこれを変えようとしています。しかし、前に、私は尋ねることに決めました:

1)誰かがこれまでに似たようなことをしたことがありますか?私は、最近のレコードのために別のデータベースを意味します。

2)この特定のケースでデータベースを最適化する最も一般的な方法は何ですか?

この時点ではさまざまな方法がありますので、ご意見は歓迎します。

+0

使用されなくなった古いレコードをパージしたくない理由はありますか? – Dutchie432

+0

はい、私が言及したように、それらはすべて保たれるべきです。 – Denis

答えて

1

INDEXを使用してみてください:アクセス、使用を改善し、情報の展開

CREATE INDEX

を。

+0

さらなる調査をすると、INDEXは実際には以前の開発者が知りませんでした:) – Denis

0

私は、これは解決策は、日付範囲のテーブルベースにPartionを行うことですあなたRANGE Partitioning

+0

なぜ、どのように役立ち、どのように動作するのか、リンクの背後に隠れているのか、そのサイトの中核となる情報は、リンクが壊れていても存在しなくても役立ちますか?それを読んでくださいpls:[回答] – Pred

+0

私は24時間ごとに "最近の"データベースに保存されていることを言いました。だから、パーティション化を完全に自動化しても、私は毎日新しいパーティションを作成することが特に良いとは思いません。 – Denis

0

助けることができると信じています。 大きなテーブルをより小さな個別のテーブルに分割することで、スキャンするデータが少なくて済むため、データのほんの一部にしかアクセスしないクエリが高速に実行できます。索引の再構築や表のバックアップなどの保守作業は、より迅速に実行できます。

のMySQLのドキュメントが有用であることができ、これをチェックアウト: https://dev.mysql.com/doc/refman/5.5/en/partitioning-columns-range.html

関連する問題