次のデータベース スキーマがあります: https://dl.dropbox.com/u/37915176/schema.PNG
meter_relevation には 200 万件以上のレコードがあります。データは、meter_history テーブルを持つアプライアンス (デバイス) に関連付けられている複数の電気メーターから取得されます。
特定の日付範囲のデバイスのデータを取得しようとしています:
SELECT MR.*
FROM device AS D, meter_history AS MH, meter AS M, meter_relevation AS MR
WHERE D.Id=MH.Id_Device
AND MH.Id_Meter=M.Id
AND M.Id=MR.Id_Meter
AND D.Id="8"
AND MR.Date>="2012-10-04"
AND MR.Date<="2012-10-04"
しかし、パフォーマンスは非常に遅く、指定された日付範囲のレコードがなくても 10 秒を取得できます。
EXPLAIN を試してみたところ、クエリが最適ではないことがはっきりとわかります。meter_relevation テーブルには、200 万を超える行の総数がリストされています: https://dl.dropbox.com/u/37915176/explain.png
助言がありますか?より良い方法はありますか?もちろん、クライアント側でいくつかの作業を行い、いくつかのクエリに分割することもできます。しかし、単一の SELECT クエリに対してより良い方法があるかどうかを知りたいです。