如果可能的话,优化这个mysql查询以使用我的索引?

时间:2012-05-07 10:19:19

标签: mysql query-optimization

我有一个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上的索引无法正常工作。

我显然做了一些根本错误的事情,但无法弄明白。更改索引中列的顺序不起作用。

1 个答案:

答案 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;