MySQL大约12000行返回后查询缓慢



我有一个表,它是:power_ref INT主键美国瓦茨INT时间DATETIME

它有几百万行,它基本上是我的房子每六秒消耗的电量。

要生成一天条目的图表,我有以下查询(稍微修改,因为我实际上用now()替换了手动输入的日期):

"select watts = watts, time = time from power where date(time)=date('2015-07-10') order by time desc limit 14400;"

在"time"列上有一个索引,但是这个查询忽略了它。运行大约需要15秒。

但是,如果我发出以下命令:

"select watts as watts, time as time from power where date(time)=date('2015-07-10') order by time desc limit 12000;"

查询大约0.1秒完成,MySQL在时间列上使用索引。

我尝试了以下操作(强制使用索引,但MySQL仍然不使用索引)

"select watts, time from power USE INDEX (timeIndex) where date(time)=date('2015-07-10') order by time desc limit 14400;"

我通过在查询前发出"explain"来查找索引是否被使用。

我设置了14400的限制,因为这是一天中条目的最大数量,不是真正需要的,但只是以防万一。

优化器确定全表扫描会更快。一旦数据量发生变化,这种行为就会改变。USE INDEX不是强制索引,而是强制mysql忽略其他索引。FORCE INDEX将强制使用索引:

select watts, time from power FORCE INDEX (timeIndex) 
where date(time)=date('2015-07-10') order by time desc limit 14400;

应该得到你想要的索引行为

最新更新