MySQL 设计数据表时,时间类型 datetime、bigint、timestamp MySQL日期函数
阅读目录
- 阐述
- 数据表
- MySQL 调用存储过程实现批量插入数据
- sql 查询速率测试
- sql 分组速率测试
- sql 排序速率测试
- 结论
- MySQL日期函数
- 1、DATE()
- 2、TIME()
- 3、TIMESTAMP()
- 4、UNIX_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
MySQL 调用存储过程实现批量插入数据
CREATE PROCEDURE tb_option ()
BEGINDECLARE i BIGINT DEFAULT 1;WHILE i < 50000001 DOINSERT INTO `yiibaidb`.`users` (`time_date`,`time_timestamp`,`time_long`)
VALUES(TIMESTAMP (NOW()),TIMESTAMP (NOW()),UNIX_TIMESTAMP(now()));SET i = i + 1;END
WHILE;COMMIT;#提交
END;CALL tb_option ();
sql 查询速率测试
通过 datetime 类型查询:
SELECTcount(*)
FROMusers
WHEREtime_date >= "2022-12-01 23:32:44"
AND time_date <= "2022-12-01 23:41:22"
耗时:0.171
通过 timestamp 类型查询
SELECTcount(*)
FROMusers
WHEREtime_timestamp >= "2018-10-21 23:32:44"
AND time_timestamp <= "2018-10-21 23:41:22"
耗时:0.351
通过 bigint 类型查询
SELECTcount(*)
FROMusers
WHEREtime_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 类型分组:
SELECTtime_timestamp,count(*)
FROMusers
GROUP BYtime_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年记录的时间有限。
MySQL日期函数
1、DATE()
返回 日期。格式:YYYY-MM-DD
SELECT DATE(NOW());
> 2022-04-04
2、TIME()
返回 日期。格式:HH-mm-ss
SELECT TIME(NOW());
> 16:25:09
3、TIMESTAMP()
返回 日期时间。格式:YYYY-MM-DD HH-mm-ss
SELECT TIMESTAMP(NOW());
> 2022-04-04 16:31:12
4、UNIX_TIMESTAMP()
获取日期的时间戳(10位)
SELECT unix_timestamp(now());
> 1649083817
MySQL 设计数据表时,时间类型 datetime、bigint、timestamp MySQL日期函数相关推荐
- mysql创建表设置数值范围,MySQL创建数据表时设定引擎MyISAM/InnoDB操作
我在配置mysql时将配置文件中的默认存储引擎设定为了innodb.今天查看了myisam与innodb的区别,在该文中的第七条"myisam支持gis数据,innodb不支持.即myisa ...
- myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法)
myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) 参考文章: (1)myeclipse连接mysql生成数据表时中文字符乱码或问号(解决方法) (2)https://www. ...
- MySql中的时间类型datetime,timestamp,date,year比较
MySQL日期类型.日期格式.存储空间.日期范围比较. 日期类型 存储空间 日期格式 日期范围 ------------ --------- ...
- MySQL创建数据表时设定引擎MyISAM/InnoDB
我在配置mysql时将配置文件中的默认存储引擎设定为了InnoDB.今天查看了MyISAM与InnoDB的区别,在该文中的第七条"MyISAM支持GIS数据,InnoDB不支持.即MyISA ...
- mysql导入数据表大小限制,解除phpMyAdmin导入大型MySQL数据库文件大小限制
phpMyAdmin 导入大型数据库文件大小限制配置- 1. 修改 php.ini 文件中下列3项的值: upload_max_filesize, memory_limit 和 post_max_si ...
- mysql 创建 innodb_MySQL创建数据表时设定引擎MyISAM/InnoDB操作
我在配置mysql时将配置文件中的默认存储引擎设定为了InnoDB.今天查看了MyISAM与InnoDB的区别,在该文中的第七条"MyISAM支持GIS数据,InnoDB不支持.即MyISA ...
- mysqlinnodb教程_MySQL创建数据表时设定引擎MyISAM/InnoDB操作
我在配置mysql时将配置文件中的默认存储引擎设定为了InnoDB.今天查看了MyISAM与InnoDB的区别,在该文中的第七条"MyISAM支持GIS数据,InnoDB不支持.即MyISA ...
- navicat mysql表导入_Navicat for MySQL导入数据表的操作方法
刚接触Navicat的用户,不清楚Navicat for MySQL怎么导入数据表?现在就跟着小编一起来看一下Navicat for MySQL导入数据表的操作方法吧. Navicat for MyS ...
- mysql 数据库时间类型 datetime 数据在页面上显示一串数字, 用函数date_format( )转换格式 ;
mysql 数据库时间类型 datetime 转换格式 数据库时间字段datetime可以使用date_format( )函数进行时间的转换. 数据库时间字段类型: 数据库查询结果: 没转换前页面显示 ...
最新文章
- SAP Cloud Platform创建Destination时Additional properties属性的维护
- 重庆大学计算机组成,重庆大学计算机组成原理试题集(含部分答案)
- Linux ping命令、Linux kill命令、Linux logname命令、 Linux logout命令
- Java转置_Java实现单链表的逆转置
- Redis学习---(15)Redis 脚本
- 交换机端口配置与管理
- 手机app测试用例怎么写?手机app测试点有哪些?只有干货没有水分,错过绝对后悔!
- word 插入公式附加右侧编号方法
- 联通物联卡为什么没有网络_联通物联卡的资费和优势怎样
- [jzoj 4226] 【五校联考3day2】A {简单题}
- 魔兽世界 - 宏命令
- 计算机视觉实战----AlexNet网络及使用colab跑YoloV5代码
- kubernetes入门实战
- 满江红--大宋提刑官
- 分布式事务常见解决方案
- 免费资源和IT常用链接
- 如果编程语言是女孩子……
- 【胖虎的逆向之路】01——动态加载和类加载机制详解
- 爱聊语音聊天室为什么用不了摄像头?
- 一阶数字低通滤波器的实现
热门文章
- emlog链接html,实现emlog的友情链接只在首页显示
- 两类数学归纳法及斐波那契通项的证明
- linux做桌面操作系统,我心目中的microsoft(对于普通用户,linux真的适合做桌面操作系统吗)...
- 百度地图API实现自动定位城市,省市二联重新地图重新定位
- mysql50条必看语句_关于语句大全的10篇文章推荐
- EasyExcel动态合并单元格
- js实现数据的excel下载
- java检查手机号是否被注册_【java】如何开发一个检测手机号注册过哪些网站的应用?...
- python中的切片操作
- 详解ImageNet 2017夺冠架构SENet