Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
2023-09-14 08:57:51 时间
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'
虽然走了强制索引,但实际上依然很慢。这主要还是数据量大或者并没有真正走到索引上。
当数据量大,这样的联合索引:ind_coll_date_route (dep_date ,dep,arr) 日期就走的很慢,经过多少发现这是mysql的一个bug,
后将联合索引改成:ind_coll_date_route (dep,arr,dep_date) ,速度快了很多,并且也走了索引。
相关文章
- 磁盘爆满导致MySQL无法启动:Disk is full writing './mysql-bin.~rec~' (Errcode: 28). Waiting for someone to free space...
- 【MySQL】批量删除mysql中数据库中的表
- 【MySQL】一次修改mysql 默认路径的经历
- Mybatis+mysql动态分页查询数据案例——房屋信息的实现类(HouseDaoMybatisImpl)
- MySQL中 如何查询表名中包含某字段的表
- ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了
- Mysql时间存储类型优缺点?DATETIME?TIMESTAMP?INT?
- mysql--SQL编程(关于mysql中的日期) 学习笔记2
- MySQL--执行mysql脚本及其脚本编写
- MYSQL错误解决:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- mysql--SQL编程(关于mysql中的日期,关于重叠) 学习笔记2.2
- mysql的服务器构成
- MySQL内核月报 2015.01-MySQL · 捉虫动态· mysql client crash一例
- MySQL关闭过程详解和安全关闭MySQL的方法
- Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)
- MySQL普通索引与唯一索引__mysql中唯一索引和普通索引的用途及区别
- python3操作MySQL:insert插入数据
- Starting MySQL ERROR! Couldn‘t find MySQL server (/usr/local/mysql/bin/mysqld_safe)
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
- mysql sql语句大全(MySQL语句 整理一)
- Mysql批量更新性能优化学习
- MySQL之自带四库之mysql库
- golang操作mysql数据库(Go-SQL-Driver/MySQL)
- MySQL主从配置及mysqldump备份实战
- MySQL 学习心得和知识总结(一)