3

我有一个 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 上的索引是否不起作用。

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

4

1 回答 1

4

broadcast_at如果您在该字段上使用函数,我认为 MySQL 无法利用索引。

如果你这样做,它的表现如何:

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;
于 2012-05-07T10:24:25.087 回答