iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何解决MySQL存储时间类型选择的问题
  • 214
分享到

如何解决MySQL存储时间类型选择的问题

2024-04-02 19:04:59 214人浏览 八月长安
摘要

这篇文章主要为大家展示了“如何解决Mysql存储时间类型选择的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决mysql存储时间类型选择的问题”这篇文

这篇文章主要为大家展示了“如何解决Mysql存储时间类型选择的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决mysql存储时间类型选择的问题”这篇文章吧。

Mysql中存储时间通常会用datetime类型,但现在很多系统也用int存储unix时间戳,它们有什么区别?本人总结如下:

int

(1)4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点

(2)可读性极差,无法直观的看到数据

TIMESTAMP

(1)4个字节储存

(2)值以UTC格式保存

(3)时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

(4)TIMESTAMP值不能早于1970或晚于2037

datetime

(1)8个字节储存

(2)与时区无关

(3)以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'

随着Mysql性能越来越来高,个人觉得关于时间的存储方式,具体怎么存储看个人习惯和项目需求吧

分享两篇关于int vs timestamp vs datetime性能测试的文章

Myisam:MySQL DATETIME vs TIMESTAMP vs INT 测试

CREATE TABLE `test_datetime` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`datetime` FIELDTYPE NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

机型配置

  • kip-locking

  • key_buffer = 128M

  • max_allowed_packet = 1M

  • table_cache = 512

  • sort_buffer_size = 2M

  • read_buffer_size = 2M

  • read_rnd_buffer_size = 8M

  • myisam_sort_buffer_size = 8M

  • thread_cache_size = 8

  • query_cache_type = 0

  • query_cache_size = 0

  • thread_concurrency = 4

测试

DATETIME   14111 14010        14369     130000000
TIMESTAMP  13888        13887        14122     90000000
INT        13270        12970        13496     90000000

执行mysql

mysql> select * from test_datetime into outfile ‘/tmp/test_datetime.sql';
Query OK, 10000000 rows affected (6.19 sec)

mysql> select * from test_timestamp into outfile ‘/tmp/test_timestamp.sql';
Query OK, 10000000 rows affected (8.75 sec)

mysql> select * from test_int into outfile ‘/tmp/test_int.sql';
Query OK, 10000000 rows affected (4.29 sec)

alter table test_datetime rename test_int;
alter table test_int add column datetimeint INT NOT NULL;
update test_int set datetimeint = UNIX_TIMESTAMP(datetime);
alter table test_int drop column datetime;
alter table test_int change column datetimeint datetime int not null;
select * from test_int into outfile ‘/tmp/test_int2.sql';
drop table test_int;

So now I have exactly the same timestamps from the DATETIME test, and it will be possible to reuse the originals for TIMESTAMP tests as well.

mysql> load data infile ‘/export/home/ntavares/test_datetime.sql' into table test_datetime;
Query OK, 10000000 rows affected (41.52 sec)
Records: 10000000 Deleted: 0 Skipped: 0 Warnings: 0

mysql> load data infile ‘/export/home/ntavares/test_datetime.sql' into table test_timestamp;
Query OK, 10000000 rows affected, 44 warnings (48.32 sec)
Records: 10000000 Deleted: 0 Skipped: 0 Warnings: 44

mysql> load data infile ‘/export/home/ntavares/test_int2.sql' into table test_int;
Query OK, 10000000 rows affected (37.73 sec)
Records: 10000000 Deleted: 0 Skipped: 0 Warnings: 0

As expected, since INT is simply stored as is while the others have to be recalculated. Notice how TIMESTAMP still perfORMs worse, even though uses half of DATETIME storage size.

Let's check the performance of full table scan:

mysql> SELECT SQL_NO_CACHE count(id) FROM test_datetime WHERE datetime > ‘1970-01-01 01:30:00′ AND datetime < ‘1970-01-01 01:35:00′;
+———–+
| count(id) |
+———–+
|  211991 |
+———–+
1 row in set (3.93 sec)

mysql> SELECT SQL_NO_CACHE count(id) FROM test_timestamp WHERE datetime > ‘1970-01-01 01:30:00′ AND datetime < ‘1970-01-01 01:35:00′;
+———–+
| count(id) |
+———–+
|  211991 |
+———–+
1 row in set (9.87 sec)

mysql> SELECT SQL_NO_CACHE count(id) FROM test_int WHERE datetime > UNIX_TIMESTAMP('1970-01-01 01:30:00′) AND datetime < UNIX_TIMESTAMP('1970-01-01 01:35:00′);
+———–+
| count(id) |
+———–+
|  211991 |
+———–+
1 row in set (15.12 sec)

Then again, TIMESTAMP performs worse and the recalculations seemed to impact, so the next Good thing to test seemed to be without those recalculations: find the equivalents of those UNIX_TIMESTAMP() values, and use them instead:

mysql> select UNIX_TIMESTAMP('1970-01-01 01:30:00′) AS lower, UNIX_TIMESTAMP('1970-01-01 01:35:00′) AS bigger;
+——-+——–+
| lower | bigger |
+——-+——–+
| 1800 |  2100 |
+——-+——–+
1 row in set (0.00 sec)

mysql> SELECT SQL_NO_CACHE count(id) FROM test_int WHERE datetime > 1800 AND datetime < 2100;
+———–+
| count(id) |
+———–+
|  211991 |
+———–+
1 row in set (1.94 sec)

Innodb:MySQL DATETIME vs TIMESTAMP vs INT performance and benchmarking with InnoDB

以上是“如何解决MySQL存储时间类型选择的问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: 如何解决MySQL存储时间类型选择的问题

本文链接: https://www.lsjlt.com/news/57309.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决MySQL存储时间类型选择的问题
    这篇文章主要为大家展示了“如何解决MySQL存储时间类型选择的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决MySQL存储时间类型选择的问题”这篇文...
    99+
    2024-04-02
  • MySQL中怎么选择时间类型存储格式
    本篇文章给大家分享的是有关MySQL中怎么选择时间类型存储格式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。int型:存储长度: 4字节表示范...
    99+
    2024-04-02
  • 如何解决MySQL存储时间出现不一致的问题
    小编给大家分享一下如何解决MySQL存储时间出现不一致的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!用Java在获取了系统时间后,存入MySQL数据库时,当时间的类型为datetime或Timestamp时发现数据库...
    99+
    2023-06-14
  • MySQL表类型 存储引擎 的选择
    目录1、查看当前数据库支出的存储引擎方法1:方法2:2、ENGINE={存储引起类型}  创建表的时候,设置存储引擎3、alter able tablename engin...
    99+
    2024-04-02
  • MongoDB存储时间时差问题的解决方法
    前言 MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中,当我们取出存储的时间时,就会出现时差的问题。 比如我们用的北京时间,读取到的数值就会看到比当前时间少了8个小时,难道说我们...
    99+
    2024-04-02
  • 如何解决iView中时间控件选择的时间总是少一天的问题
    这篇文章将为大家详细讲解有关如何解决iView中时间控件选择的时间总是少一天的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在用iview做前端页面开发的时候,遇到一...
    99+
    2024-04-02
  • 如何实现MySQL底层优化:数据类型选择与存储空间优化
    MySQL是一款广泛使用的关系型数据库管理系统,其底层优化对于数据库的性能和稳定性至关重要。本文将对MySQL数据类型选择与存储空间优化进行详细介绍,并给出具有实际意义的代码示例。一、数据类型选择与优化1.常见数据类型介绍MySQL支持多种...
    99+
    2023-11-08
    MySQL 数据类型 优化 存储空间优化
  • 如何解决mysql存储过程太慢的问题
    小编给大家分享一下如何解决mysql存储过程太慢的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql存储过程太慢的解决...
    99+
    2024-04-02
  • 如何解决mysql插入时间戳问题
    这篇文章将为大家详细讲解有关如何解决mysql插入时间戳问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。数据表中设置的是timestamp(6),然后时间...
    99+
    2024-04-02
  • 关于mysql中时间日期类型和字符串类型的选择
    目录一、DATETIME、TIMESTAMP 的用法1、相同点2、不同点3、选择二、varchar 和 text 数据类型的用法1、相同点2、不同点3、选择一、DATETIME、TI...
    99+
    2024-04-02
  • 如何实现MySQL底层优化:数据类型选择与存储空间的最佳实践
    抱歉,由于您要求包含具体的代码示例,我无法在此处提供中文文章。...
    99+
    2023-11-08
    MySQL 底层优化 数据类型选择
  • MySQL如何解决无法存储emoji表情的问题
    这篇文章给大家分享的是有关MySQL如何解决无法存储emoji表情的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下1. 在navicat中如果在新建表之前就改变数...
    99+
    2024-04-02
  • 如何解决element-ui日期时间选择器的日期格式化问题
    小编给大家分享一下如何解决element-ui日期时间选择器的日期格式化问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在...
    99+
    2024-04-02
  • 如何解决docker中mysql时间与系统时间不一致问题
    这篇文章将为大家详细讲解有关如何解决docker中mysql时间与系统时间不一致问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最近在Docker中装mysql时,发现数据库时间与系统时间相差8个小时。...
    99+
    2023-06-22
  • 教你巧用mysql位运算解决多选值存储的问题
    目录一.问题场景二. 场景分析1.多字段存储2.单字段拼接三.巧用位运算1.概述2.sql查询3.Java解析与计算4.总结附MySQL的支持6种位运算总结一.问题场景 工作中经常遇...
    99+
    2024-04-02
  • MySQL中如何选择合适的存储引擎
    这期内容当中小编将会给大家带来有关MySQL中如何选择合适的存储引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MySQL有多种存储引擎:MyISAM、InnoDB、M...
    99+
    2024-04-02
  • 如何解决ajax接收Date类型的数据时把数据转换为时间戳的问题
    这篇文章主要介绍“如何解决ajax接收Date类型的数据时把数据转换为时间戳的问题”,在日常操作中,相信很多人在如何解决ajax接收Date类型的数据时把数据转换为时间戳的问题问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • 日志存储在Java程序中的数据类型选择有哪些需要注意的问题?
    在Java程序中,日志是一种非常重要的信息,可以帮助我们了解程序的运行情况、问题所在、以及性能瓶颈等。因此,合理地存储日志信息对于程序的调试和性能优化非常有帮助。在存储日志信息时,我们需要注意选择合适的数据类型,以便能够充分利用存储空间,...
    99+
    2023-07-31
    数据类型 日志 存储
  • 如何解决Linq存储过程返回问题
    这篇文章主要为大家展示了“如何解决Linq存储过程返回问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Linq存储过程返回问题”这篇文章吧。存储过程在我们编写程序中,往往需要一些存储过...
    99+
    2023-06-17
  • MySQL中布尔类型的常见问题解决
    MySQL中布尔类型的常见问题解决 在MySQL数据库中,布尔类型通常被表示为TINYINT(1),其中0代表false,1代表true。虽然布尔类型看似简单,但在使用过程中也可能会遇...
    99+
    2024-03-15
    布尔类型问题 布尔类型解决
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作