MySQL数据库时间类型datetime、bigint、timestamp的查询效率比较
以下文章来源方志朋的博客,回复”666“获面试宝典
来源:https://juejin.im/post/6844903701094596615
数据库中可以用datetime、bigint、timestamp来表示时间,那么选择什么类型来存储时间比较合适呢?
前期数据准备
通过程序往数据库插入50w数据
数据表:
CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`time_date` datetime NOT NULL,`time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`time_long` bigint(20) NOT NULL,PRIMARY KEY (`id`),KEY `time_long` (`time_long`),KEY `time_timestamp` (`time_timestamp`),KEY `time_date` (`time_date`)
) ENGINE=InnoDB AUTO_INCREMENT=500003 DEFAULT CHARSET=latin1
其中time_long、time_timestamp、time_date为同一时间的不同存储格式
实体类users
/*** @author hetiantian * @date 2018/10/21* */
@Builder
@Data
public class Users {/*** 自增唯一id* */private Long id;/*** date类型的时间* */private Date timeDate;/*** timestamp类型的时间* */private Timestamp timeTimestamp;/*** long类型的时间* */private long timeLong;
}
dao层接口
/*** @author hetiantian* @date 2018/10/21* */
@Mapper
public interface UsersMapper {@Insert("insert into users(time_date, time_timestamp, time_long) value(#{timeDate}, #{timeTimestamp}, #{timeLong})")@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")int saveUsers(Users users);
}
测试类往数据库插入数据
public class UsersMapperTest extends BaseTest {@Resourceprivate UsersMapper usersMapper;@Testpublic void test() {for (int i = 0; i < 500000; i++) {long time = System.currentTimeMillis();usersMapper.saveUsers(Users.builder().timeDate(new Date(time)).timeLong(time).timeTimestamp(new Timestamp(time)).build());}}
}
sql查询速率测试
通过datetime类型查询:
select count(*) from users where time_date >="2018-10-21 23:32:44" and time_date <="2018-10-21 23:41:22"
耗时:0.171
通过timestamp类型查询
select count(*) from users where time_timestamp >= "2018-10-21 23:32:44" and time_timestamp <="2018-10-21 23:41:22"
耗时:0.351
通过bigint类型查询
select count(*) from users where time_long >=1540135964091 and time_long <=1540136482372
耗时:0.130s
结论 在InnoDB存储引擎下,通过时间范围查找,性能bigint > datetime > timestamp
sql分组速率测试
使用bigint 进行分组会每条数据进行一个分组,如果将bigint做一个转化在去分组就没有比较的意义了,转化也是需要时间的
通过datetime类型分组:
select time_date, count(*) from users group by time_date
耗时:0.176s
通过timestamp类型分组:
select time_timestamp, count(*) from users group by time_timestamp
耗时:0.173s
结论 在InnoDB存储引擎下,通过时间分组,性能timestamp > datetime,但是相差不大
sql排序速率测试
通过datetime类型排序:
select * from users order by time_date
耗时:1.038s
通过timestamp类型排序
select * from users order by time_timestamp
耗时:0.933s
通过bigint类型排序
select * from users order by time_long
耗时:0.775s
结论 在InnoDB存储引擎下,通过时间排序,性能bigint > timestamp > datetime
小结
如果需要对时间字段进行操作(如通过时间范围查找或者排序等),推荐使用bigint,如果时间字段不需要进行任何操作,推荐使用timestamp,使用4个字节保存比较节省空间,但是只能记录到2038年记录的时间有限
在这里,我为大家准备了一份2021年最新最全的《史上最简单的java面试题》,这套电子书涵盖了诸多java技术栈的面试知识题,是作者面试BAT大厂的前的总结,作者顺利拿下AT的offer,相信可以帮助大家在最短的时间内复习Java后端的大多数面试题,从而拿到自己心仪的offer。截了张图,大家可以仔细查看左边的菜单栏,覆盖的知识面真的很广,而且质量都很不错。资料获取方法扫描下方二维码
后台回复关键词:BAT
明天见(。・ω・。)
MySQL数据库时间类型datetime、bigint、timestamp的查询效率比较相关推荐
- mysql 数据库时间类型 datetime 数据在页面上显示一串数字, 用函数date_format( )转换格式 ;
mysql 数据库时间类型 datetime 转换格式 数据库时间字段datetime可以使用date_format( )函数进行时间的转换. 数据库时间字段类型: 数据库查询结果: 没转换前页面显示 ...
- datetime mysql 查询_mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
数据库中可以用datetime.bigint.timestamp来表示时间,那么选择什么类型来存储时间比较合适呢? 前期数据准备 通过程序往数据库插入50w数据 数据表: CREATE TABLE ` ...
- MySql中的时间类型datetime,timestamp,date,year比较
MySQL日期类型.日期格式.存储空间.日期范围比较. 日期类型 存储空间 日期格式 日期范围 ------------ --------- ...
- mysql中时间类型datetime,timestamp与int的区别
在mysql中存储时间,我们可以用datetime 格式,timestamp格式,也可以用int格式.那么我们设计的时候该如何考虑呢? 首先,我觉得应该明白这几个格式究竟是如何的,然后看看他们的区别, ...
- mysql字段时间类型报异常Data truncation: Incorrect datetime value: ‘2099-01-01 00:00:00‘ for column
更新某日期字段报如下异常: ### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrec ...
- MySQL5日期类型DATETIME和TIMESTAMP相关问题详解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/280284 MySQ ...
- mysql数据库字段类型大全_mysql数据库字段类型详解
MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...
- mysql 有always on么,mysql 关于时间类型的刨坑之路
前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME.TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的 0000-00-00 00:00:00 ...
- MySQL的时间类型
MySQL的时间类型 首先可以将使用字符串类型来表示时间类型排除掉:字符串占用需要 19字节,占用的空间比较大.其次字符串表示的时间比较.处理比较麻烦,不能使用时间函数,比如:YEAR() 所以MyS ...
最新文章
- 基于OpenCV的透视图转化为不同平面
- 为什么会有jsessionid,这个东东有什么用呢?
- 洛谷 [P2590] 树的统计
- ETL安装前的准备 - 数据库创建方法
- 数组的最后一位的下一位为什么是0?
- 零代码、不花钱就能做大屏,这个报表工具帮了大忙
- 【汇编】JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
- dotween路径移动_使用DOTween Pro插件设置物体移动的位置、移动的方式、以及动画结束时执行方法...
- R6300V2 从 DD-WRT 回刷恢复 官方原厂固件 DD-WRT to R6300V2
- 批处理顺序执行多条命令
- Hadoop安装教程(单机/伪分布式配置)
- ENSP安装教程【手把手教学】
- 联想小新v2000bigger安装黑苹果
- gitlab设置项目组成员权限
- C语言CGI编程入门(一)
- 钓鱼网站制作Kali
- 对企业来说,网络营销渠道与传统营销的渠道有何不同?
- 有趣的计算机课的作文,有趣的电脑课作文400字
- 自己编写的数据库如何和mapkeeper相连进行评测
- 4th 【最小生成树并查集】征兵
热门文章
- C++加快编译速度的方法
- Oozie 配合 sqoop hive 实现数据分析输出到 mysql
- join......on 后面的and 和where的区别
- Static、DynamicResource学习笔记一
- 通过BeanShell获取UUID并将参数传递给Jmeter
- 函数项目一个超感人的故事:关于swfupload在某些环境下面session丢失的完美解决方案(看完我哭了)...
- 【NCEPU】韩宇:上海新能源汽车比赛方案讲解
- Matlab编程与数据类型 -- 文本M文件
- Matlab与线性代数--矩阵的Cholesky分解
- 新进展!英伟达用 AI 给纪录片配音,情绪语调拿捏得稳稳地