Mysql: mysql between 日期索引 索引问题-日期索引使用
Posted 穆晟铭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql: mysql between 日期索引 索引问题-日期索引使用相关的知识,希望对你有一定的参考价值。
mysql: mysql between 日期索引 索引问题-日期索引使用
表结构:
dep_date
dep
arr
联合索引: ind_coll_date_route (dep_date ,dep,arr)
这两天发现原来的查询效率慢了,使用explain 查看,居然没有使用索引,
我的索引是日期类型的,首先想到的是mysql对日期类型的索引的处理机制是不是不同,在where条件里试了几种,发现效果都差不多,
where dep_date >= ‘20161121’
where dep_date >= ‘2016-11-21’
where dep_date between ‘2016-11-01’ and ‘2016-11-21’
还有各种函数,最后发现结论都是一样的,在baidu上查询也没有有价值的内容。
最后发现了一些规律,但不知道是否有普遍性,即:
在查询数据条数约占总条数五分之一以下时能够使用到索引,但超过五分之一时,则使用全表扫描了。
试了多张表,均是这个结论, 所以想这个五分之一应该是在某一个地方设置的,或者是系统默认在查询优化时的一个经验值,在以后的处理的进修引起注意。
解决办法:
强制走索引
SELECT * FROM `table_xxx` FORCE INDEX ( ind_coll_date_route ) WHERE
dep_date BETWEEN ‘2017-12-01‘ AND ‘2017-12-30‘
以上是关于Mysql: mysql between 日期索引 索引问题-日期索引使用的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:索引具有多个 BETWEEN 表达式的 WHERE 子句
使用 mySQL 运算符 BETWEEN 和经典日期间隔之间有啥区别? [复制]
MySQL 用 BETWEEN AND 日期查询包含范围边界