Mysql 日期索引-长范围搜索所有行,不小
为什么MySQL在切换到1年范围时搜索所有行?Mysql 日期索引-长范围搜索所有行,不小,mysql,indexing,date-range,Mysql,Indexing,Date Range,为什么MySQL在切换到1年范围时搜索所有行? --Table dates id (int) date (timestamp) value (varchar) PRIMARY(id), date_index(date) 1750行 执行 EXPLAIN SELECT*日期介于“2011-04-27”和“2011-04-28”之间的日期 行列显示18行 如果我增加或减少范围(例如1年),行列显示1750行 EXPLAIN SELECT*日期介于“2011-04-27”和“
--Table dates
id (int)
date (timestamp)
value (varchar)
PRIMARY(id), date_index(date)
1750行
执行EXPLAIN SELECT*日期介于“2011-04-27”和“2011-04-28”之间的日期
行列显示18行如果我增加或减少范围(例如1年),行列显示1750行
EXPLAIN SELECT*日期介于“2011-04-27”和“2012-04-28”之间的日期
EXPLAIN SELECT*FROM dates,其中日期介于“2010-04-27”和“2011-04-28”之间
优化器根据包括数据量/分布在内的几项内容构建查询计划。我最好的猜测是,您没有超过一年的数据,或者使用索引获取一年的数据不会比表的总大小少很多行
如果这听起来不正确,您可以发布以下内容的输出:
SELECT MIN(date), MAX(date) FROM dates;
SELECT COUNT(*) FROM dates WHERE date BETWEEN '2011-04-27' AND '2012-04-28';
我写的这篇文章也展示了一些优化器如何工作的例子:这篇文章最相关的部分是“为什么MySQL不使用我的索引?”。当然,我必须在这个问题上多挖掘一些。这件事不是小事。谢谢你,詹姆斯