我有一个mysql查询,我认为应该使用我的索引,但似乎仍然需要扫描很多行(我认为)。
这是我的问题:
SELECT DISTINCT DAY(broadcast_at) AS 'days'
from v3211062009
where month(broadcast_at) = 5 and
year(broadcast_at) = 2012
and deviceid = 337 order by days;
在我的桌子上,我在 broadcast_at,deviceid 上设置了索引。但是,对此查询的解释结果如下:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE v3211062009 ref indx_deviceid,indx_tracking_query indx_tracking_query 4 const **172958** Using where; Using index; Using temporary; Using filesort
我不明白为什么需要查找这么多行。此deviceid记录的总行数仅为 184085 ,因此我的查询似乎几乎只是查看所有这些行以获取结果集。 broadcast_at上的索引无法正常工作。
我显然做了一些根本错误的事情,但无法弄明白。更改索引中列的顺序不起作用。
答案 0 :(得分:4)
如果您在该字段上使用函数,我认为MySQL不会利用broadcast_at
上的索引。
如果你这样做,它会如何表现:
SELECT DISTINCT DAY(broadcast_at) AS 'days'
from v3211062009
where broadcast_at >= ('2012-05-01') AND
broadcast_at < ('2012-06-01')
and deviceid = 337 order by days;