Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 日期索引-长范围搜索所有行,不小_Mysql_Indexing_Date Range - Fatal编程技术网

Mysql 日期索引-长范围搜索所有行,不小

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”和“

为什么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”和“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不使用我的索引?”。当然,我必须在这个问题上多挖掘一些。这件事不是小事。谢谢你,詹姆斯