我有以下数据库架构: 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 查询是否有更好的方法。