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

时间:2015-07-12 23:37:07

标签: mysql

我有一张桌子是: power_ref INT主键 瓦特INT 时间DATETIME

它有几百万行,它基本上是每六秒我家的当前耗电量。

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

&#34;选择瓦特为瓦特,时间为电源时间,日期(时间)=日期(&#39; 2015-07-10&#39;)按时间顺序限制14400;&#34; < / p>

&#34;时间&#34;有一个索引。列,但此查询忽略它。运行大约需要15秒。

但是,如果我发出以下内容:

&#34;选择瓦特为瓦特,时间为电源时间,日期(时间)=日期(&#39; 2015-07-10&#39;)按时间顺序限制12000;&#34; < / p>

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

我已经尝试过以下方法(强制使用索引,但MySQL仍然没有使用索引)

&#34;选择瓦特,时间来自电源使用指数(timeIndex),其中日期(时间)=日期(&#39; 2015-07-10&#39;)按时间顺序限制14400;&#34;

我发现是否通过发出&#34;解释&#34;在查询前面。

我已经设定了14400的限制,因为这是一天中的最大条目数,并非真正需要,但以防万一。

1 个答案:

答案 0 :(得分:0)

优化器确定全表扫描会更快。数据卷更改后,此行为会更改。 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;

应该为您提供所需的索引行为