我有一张桌子是: 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的限制,因为这是一天中的最大条目数,并非真正需要,但以防万一。
答案 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;
应该为您提供所需的索引行为