テーブル内のレコード数は? 多くの場合、リレーショナル データベースでは、所有しているデータの量ではなく (リレーショナル データベースでは何百万もありません)、データを取得する方法が問題になります。
実際、選択の外観からすると、おそらくステートメント自体を最適化し、複数の副選択を回避する必要があるだけであり、これがおそらく速度低下の主な原因です。そのステートメントで Explain を実行するか、ID を取得して、最初の実行で実際に見つけて取得したレコードの ID に対して内部選択を個別に実行してみてください。
全体的なステートメント内にこれらのサブセレクトがあるという事実は、いずれにせよ、プロセスをそこまで最適化していないことを意味します。たとえば、によって作成されたようなセットを新しいテーブルに集約する毎晩または毎時の cron ジョブを実行している場合、以前に生成されSELECT gps_unit.idgps_unit
たテーブルに対して選択を実行することができます。その場でテーブル。
その選択ステートメントを効果的に最適化できない場合は、次のような「最終的な」オプションがあります。
- いくつかの基準で分類し、別のテーブルに分割します。
- 最初の 1 年ほどを過ぎたものはあまり使用されていないテーブルに移行され、特別な検索が必要になるように、深いアーカイブを保持します。
- 最後に、非常に小さなデータがある場合は、特定のテーブルを完全にアーカイブしてファイル形式のみで保持し、特定の日付を過ぎて切り捨てることができる場合があります。それほど重要ではなく、スパムのような Web 追跡データを使用することがよくありますが、数年後、データが実際には何の役にも立たなくなったときに、これを行うことになります。