日期索引 - 远程搜索所有行,小而不是

时间:2011-04-27 11:21:39

标签: mysql indexing date-range

当我切换到1年范围时,为什么MySQL搜索所有行?

--Table dates  
id (int)   
date (timestamp)  
value (varchar)  

PRIMARY(id), date_index(date)  

1750行

执行
EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2011-04-28'

列显示 18行 如果我增加或减少BETWEEN范围 - 例如1年 - 列显示 1750行

EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28' EXPLAIN SELECT * FROM dates WHERE date BETWEEN '2010-04-27' AND '2011-04-28'

1 个答案:

答案 0 :(得分:1)

优化器根据包括数据量/分布在内的几个方面构建查询计划。我最好的猜测是你没有超过一年的数据,或者使用年份数据的索引不会使用比总表数量少得多的行。

如果听起来不对,你可以发布输出:

SELECT MIN(date), MAX(date) FROM dates;
SELECT COUNT(*) FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28';

我写的这篇文章展示了优化器如何工作的一些示例:What makes a good MySQL index? Part 2: Cardinality