以下文章来源方志朋的博客,回复”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的查询效率比较相关推荐

  1. mysql 数据库时间类型 datetime 数据在页面上显示一串数字, 用函数date_format( )转换格式 ;

    mysql 数据库时间类型 datetime 转换格式 数据库时间字段datetime可以使用date_format( )函数进行时间的转换. 数据库时间字段类型: 数据库查询结果: 没转换前页面显示 ...

  2. datetime mysql 查询_mysql数据库时间类型datetime、bigint、timestamp的查询效率比较

    数据库中可以用datetime.bigint.timestamp来表示时间,那么选择什么类型来存储时间比较合适呢? 前期数据准备 通过程序往数据库插入50w数据 数据表: CREATE TABLE ` ...

  3. MySql中的时间类型datetime,timestamp,date,year比较

    MySQL日期类型.日期格式.存储空间.日期范围比较. 日期类型        存储空间       日期格式                 日期范围 ------------ ---------  ...

  4. mysql中时间类型datetime,timestamp与int的区别

    在mysql中存储时间,我们可以用datetime 格式,timestamp格式,也可以用int格式.那么我们设计的时候该如何考虑呢? 首先,我觉得应该明白这几个格式究竟是如何的,然后看看他们的区别, ...

  5. mysql字段时间类型报异常Data truncation: Incorrect datetime value: ‘2099-01-01 00:00:00‘ for column

    更新某日期字段报如下异常: ### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrec ...

  6. MySQL5日期类型DATETIME和TIMESTAMP相关问题详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/280284 MySQ ...

  7. mysql数据库字段类型大全_mysql数据库字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  8. mysql 有always on么,mysql 关于时间类型的刨坑之路

    前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME.TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的 0000-00-00 00:00:00 ...

  9. MySQL的时间类型

    MySQL的时间类型 首先可以将使用字符串类型来表示时间类型排除掉:字符串占用需要 19字节,占用的空间比较大.其次字符串表示的时间比较.处理比较麻烦,不能使用时间函数,比如:YEAR() 所以MyS ...

最新文章

  1. 基于OpenCV的透视图转化为不同平面
  2. 为什么会有jsessionid,这个东东有什么用呢?
  3. 洛谷 [P2590] 树的统计
  4. ETL安装前的准备 - 数据库创建方法
  5. 数组的最后一位的下一位为什么是0?
  6. 零代码、不花钱就能做大屏,这个报表工具帮了大忙
  7. 【汇编】JMP跳转指令的指令长度、直接转移与间接转移、段内跳转与段间跳转
  8. dotween路径移动_使用DOTween Pro插件设置物体移动的位置、移动的方式、以及动画结束时执行方法...
  9. R6300V2 从 DD-WRT 回刷恢复 官方原厂固件   DD-WRT to R6300V2
  10. 批处理顺序执行多条命令
  11. Hadoop安装教程(单机/伪分布式配置)
  12. ENSP安装教程【手把手教学】
  13. 联想小新v2000bigger安装黑苹果
  14. gitlab设置项目组成员权限
  15. C语言CGI编程入门(一)
  16. 钓鱼网站制作Kali
  17. 对企业来说,网络营销渠道与传统营销的渠道有何不同?
  18. 有趣的计算机课的作文,有趣的电脑课作文400字
  19. 自己编写的数据库如何和mapkeeper相连进行评测
  20. 4th 【最小生成树并查集】征兵

热门文章

  1. C++加快编译速度的方法
  2. Oozie 配合 sqoop hive 实现数据分析输出到 mysql
  3. join......on 后面的and 和where的区别
  4. Static、DynamicResource学习笔记一
  5. 通过BeanShell获取UUID并将参数传递给Jmeter
  6. 函数项目一个超感人的故事:关于swfupload在某些环境下面session丢失的完美解决方案(看完我哭了)...
  7. 【NCEPU】韩宇:上海新能源汽车比赛方案讲解
  8. Matlab编程与数据类型 -- 文本M文件
  9. Matlab与线性代数--矩阵的Cholesky分解
  10. 新进展!英伟达用 AI 给纪录片配音,情绪语调拿捏得稳稳地