MySQL 搜索指定时间范围数据, 时间字段有索引但是还是很费时
问题分析
所遇情况:
- 数据库版本:5.6.38
- 查询时使用时间类型,在status、closed、playback_state字段上都有索引
- 几种查询语句
explain (select count(*)
from session
where status = 2
and playback_state = 1
and closed > '2018/10/17'
and closed < '2018-10-18');
explain (select count(*)
from session
where status = 2
and playback_state = 1
and closed like '2018-10-17%');
explain (select count(*)
from session
where status = 2
and playback_state = 1
and closed > 1539705600
and closed < 1539792000);
explain (select count(*)
from session
where status = 2
and playback_state = 1
and closed > unix_timestamp('2018/10/17')
and closed < unix_timestamp('2018-10-18'));
- 查询情况:第一种情况使用closed的索引,查询速度很快. 其他使用playback_state,因为playback_state相同的数据有很多,因此除第一种情况外,其他情况都很糟糕。
为什么其他几种情况未使用closed进行索引:
mysql查询时,不管有多少个单个索引或联合索引,永远只使用一个索引。
具体使用哪个索引进行查询,由mysql进行选择,会选择一个它认为最合适的一个字段。在以上情况中,其选择了playback_state,而非closed。
应对方案:
- 当语句执行太长时间,使用explain看一下查询情况,mysql是否使用了正确的索引。
- 在有索引的字段上使用函数是会把索引去掉的。
- 可以使用use index强制mysql使用固定索引
- 可以考虑使用联合索引(开发不能随意改动数据库的表结构)
转载于:https://www.cnblogs.com/Zereker/p/11396623.html
MySQL 搜索指定时间范围数据, 时间字段有索引但是还是很费时相关推荐
- mysql时间字段使用索引
索引可以提高查询效率,平时按照时间查询经常遇到,所以就会给时间添加索引,但是添加索引怎么用呢? 首先创建一张表test_table 然后给时间字段创建索引 导入大量数据,可以使用存储过程 查看一下表中 ...
- MySQL 查询指定时间范围内的数据
说明 mysql 比较时间范围可以直接用 >=.<= 等比较运算符,也可以用 between and(两边都包含,都是闭区间):比较运算符更常用,因为 between and 能做的比较运 ...
- created at mysql类型_MySQL created_at 日期时间字段在数据变更时,自动更新
今天在使用 GoAdmin 开发后台功能时,发现 GoAdmin 没有像 Laravel 那样自带 created_at 字段更新功能.即数据发送变化时,无法自动更新 created_at 字段. 而 ...
- MySQL中会用到age字段的索引_MySQL学习笔记(四):正确使用索引(二)
上一篇学习到了MySQL中的索引是什么,以及一些关于索引的简单的知识,这篇我打算详细地谈一谈如何正确地使用索引.索引的使用看起来很简单,但是在真正去学习它的时候才发现,原来是暗藏玄机.使用索引时有很多 ...
- 如何给mysql表添加百万条数据_给mysql一百万条数据的表添加索引
直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...
- MySQL中四种方式给字段添加索引
MySQL中给字段创建索引的四种方式: 添加主键 ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); 该语句添加一个主键,这意味着索引值必须是唯一的,且不 ...
- winform chart 添加数据报错_C# win Form开发 构造指定格式数据表字段值
在进行Win Form开发时,需要实现对数据进行存储与管理,主要采用数据库管理系统SQL Server进行数据的存储.在项目教学过程中给出下面问题描述: 问题:数据表Competitor(参赛者)要求 ...
- mysql插入timeStamp类型数据时间相差8小时的解决办法
以管理员身份登陆mysql 执行以下语句 mysql > SET time_zone = '+8:00'; # 此为北京时,我们所在东8区 mysql> flush privil ...
- MySQL:让表的时间字段在insert和update时自动更新
让字段自动更新为当前时间戳: --insert时若不指定updated值,则插入当前时间 CREATE TABLE `test_update` (`id` int(32) NOT NULL,`upda ...
最新文章
- 安装没有在R包仓库CRAN上托管的R包
- Pydev 找不到新安装的 Python egg 解决方法
- 2013cvpr的总结
- 加班其实不是真正的理由(Coders Life)
- power bi 日期计算_PowerBI 动态计算周内日权重指数
- IOC和DI的区别详解
- jpa 定义中间表实体_Spring Data JPA实体详解
- word刷子刷格式_Excel技巧—开始菜单之格式刷六大功能
- checkbox wpf 改变框的大小_WPF样式取决于复选框状态
- 笔试题--你准备好了吗
- .net微信公众号开发——群发消息
- vivado 下载程序出错:ERROR: [Labtools 27-3165] End of startup status: LOW
- 图像相似度对比分析软件,图像相似度算法有哪些
- php智能文章相关性匹配,PHP中的Pearson相关性
- 自下而上构建知识图谱全过程
- FacesServlet (Java EEWTP/JSF问题的解决--java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
- windows11如何退回windows10,手把手,突然觉得我不适合win11
- 如何将doc格式转换成jpg图片格式
- win11本地用户和组找不到的解决办法
- Wordpress网站备份
热门文章
- 解决vuex页面刷新导致数据丢失问题
- JAVA基础之理解JNI原理
- 一、静态工厂的第四个优点是返回对象的类可以根据输入参数的不同而不同。...
- 通过angular.js实现MVC的基本步骤
- 并发Goroute、定时器、信号处理、单元测试
- Error: pgraster_wkb_reader: grayscale band type 10 unsupported
- python爬虫案例-陶瓷公司数据爬取
- javascript常用验证大全
- TimeLine CSS/Javascript 时间线
- Linux软件安装的补充