datetime mysql 查询_mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
数据库中可以用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 {
@Resource
private UsersMapper usersMapper;
@Test
public 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());
}
}
}
复制代码
生成数据代码方至github:github.com/TiantianUpu…
如果不想用代码生成,而是想通过sql文件倒入数据,附sql文件网盘地址:pan.baidu.com/s/1Qp9x6z8C…
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年记录的时间有限
datetime mysql 查询_mysql数据库时间类型datetime、bigint、timestamp的查询效率比较相关推荐
- mysql 数据库时间类型 datetime 数据在页面上显示一串数字, 用函数date_format( )转换格式 ;
mysql 数据库时间类型 datetime 转换格式 数据库时间字段datetime可以使用date_format( )函数进行时间的转换. 数据库时间字段类型: 数据库查询结果: 没转换前页面显示 ...
- MySQL数据库时间类型datetime、bigint、timestamp的查询效率比较
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://juejin.im/post/6844903701094596615 数据库中可以用datetime.bi ...
- c mysql数据库函数库查询_Mysql数据库使用concat函数执行SQL注入查询
SQL注入语句有时候会使用替换查询技术,就是让原有的查询语句查不到结果出错,而让自己构造的查询语句执行,并把执行结果代替原有查询语句查询结果显示出来. 例如:原本查询语句是 select userna ...
- job历史执行记录查询 oracle_Oracle数据库定时任务配置和日志执行情况查询
基础配置: /***************************************************************** * * 移动抵扣券快到期推送提醒 * 首次执行 : 2 ...
- MySQL中的日期时间类型与格式化方式
[1]MySQL中的日期时间类型 MySQL中常用的几种时间类型有:date.datetime.time.year.timestamp 数据类型 占用字节 最小值 最大值 零值表示 date 4 10 ...
- MySQL日期数据类型、时间类型使用总结
转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ----- ...
- 传智播客 mysql视频_MySQL数据库传智播客视频教程【43集】
教程名称:MySQL数据库传智播客视频教程[43集] 教程目录:[一品资源网]传智播客PHP培训_PHP视频教程 Mysql 第01讲 介绍与安装 [一品资源网]传智播客PHP培训_PHP视频教程 M ...
- mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...
在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...
- MySQL时间字段效率_MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
正 文: 在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int.timestamp.datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好 ...
最新文章
- python学习总目录
- NLP中文面试学习资料:面向算法面试,理论代码俱全,登上GitHub趋势榜
- java 常用模块_Java 常见面试题的模块
- linux操作系统adsl 上网设置,Linux操作系统下ADSL拨号上网详细步骤
- toAppendStream doesn‘t support consuming update changes which is produced by node GroupAggregate
- handle search in myNote app
- wchar_t与char转换(转载)
- 微信小程序WXML语法介绍
- python中head_Python(Head First)学习笔记:二
- 最长k可重区间集问题最长k可重线段集问题
- (Zotero)开源的文献管理器 真香
- c语言习题 编写自定义函数 volume_c,功能是求正方体的体积(要求:正方体的的边长 a 在主函数中做输入,在主函数中调用函数 volume_c,在主函数中输出正方体体积,a 为int 型变量)。
- leo免费的excel操作界面的进销存供你下载使用
- leach算法的实现过程_LEACH分簇算法实现和能量控制算法实现
- 软考高级 真题 2016年下半年 信息系统项目管理师 案例分析
- WPF 控件 (二、按钮)
- .NET报错:所生成项目的处理器框架“MSIL”与引用“xxx”的处理器架构“AMD64”不匹配
- (翻译)下拉刷新(Pull to refresh)
- Esper epl语句详解
- SRTM DEM hgt格式转成GRID格式的问题解决