iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中存储时间的最佳实践指南
  • 400
分享到

MySQL中存储时间的最佳实践指南

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

目录前言不要使用字符串存储时间类型Mysql 中的日期类型DATETIMETIMESTAMEPTIMESTAMP 的性能问题数值型时间戳(INT)DATETIME vs TIMEST

前言

平时开发中经常需要记录时间,比如用于记录某条记录的创建时间以及修改时间。在数据库中存储时间的方式有很多种,比如 mysql 本身就提供了日期类型,比如 DATETIME,TIMESTAMEP 等,我们也可以直接存储时间戳为 INT 类型,也有人直接将时间存储为字符串类型。

那么到底哪种存储时间的方式更好呢?

不要使用字符串存储时间类型

这是初学者很容易犯的错误,容易直接将字段设置为 VARCHAR 类型,存储"2021-01-01 00:00:00"这样的字符串。当然这样做的优点是比较简单,上手快。

但是极力不推荐这样做,因为这样做有两个比较大的问题:

  • 字符串占用的空间大
  • 这样存储的字段比较效率太低,只能逐个字符比较,无法使用 Mysql 提供的日期api

MySQL 中的日期类型

MySQL 数据库中常见的日期类型有 YEAR、DATE、TIME、DATETIME、TIMESTAMEP。因为一般都需要将日期精确到秒,其中比较合适的有DATETIME,TIMESTAMEP。

DATETIME

DATETIME 在数据库中存储的形式为:YYYY-MM-DD HH:MM:SS,固定占用 8 个字节。

从 MySQL 5.6 版本开始,DATETIME 类型支持毫秒,DATETIME(N) 中的 N 表示毫秒的精度。例如,DATETIME(6) 表示可以存储 6 位的毫秒值。

TIMESTAMEP

TIMESTAMP 实际存储的内容为‘1970-01-01 00:00:00'到现在的毫秒数。在 MySQL 中,由于类型 TIMESTAMP 占用 4 个字节,因此其存储的时间上限只能到‘2038-01-19 03:14:07'。

从 MySQL 5.6 版本开始,类型 TIMESTAMP 也能支持毫秒。与 DATETIME 不同的是,若带有毫秒时,类型 TIMESTAMP 占用 7 个字节,而 DATETIME 无论是否存储毫秒信息,都占用 8 个字节。

类型 TIMESTAMP 最大的优点是可以带有时区属性,因为它本质上是从毫秒转化而来。如果你的业务需要对应不同的国家时区,那么类型 TIMESTAMP 是一种不错的选择。比如新闻类的业务,通常用户想知道这篇新闻发布时对应的自己国家时间,那么 TIMESTAMP 是一种选择。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。

TIMESTAMP 的性能问题

TIMESTAMP 还存在潜在的性能问题。

虽然从毫秒数转换到类型 TIMESTAMP 本身需要的 CPU 指令并不多,这并不会带来直接的性能问题。但是如果使用默认的操作系统时区,则每次通过时区计算时间时,要调用操作系统底层系统函数 __tz_convert(),而这个函数需要额外的加操作,以确保这时操作系统时区没有修改。所以,当大规模并发访问时,由于热点资源竞争,会产生两个问题:

  • 性能不如 DATETIME:DATETIME 不存在时区转化问题。
  • 性能抖动:海量并发时,存在性能抖动问题。

为了优化 TIMESTAMP 的使用,建议使用显式的时区,而不是操作系统时区。比如在配置文件中显示地设置时区,而不要使用系统时区:


[mysqld]

time_zone = "+08:00"

简单总结一下这两种数据类型的优缺点:

  • DATETIME 没有存储的时间上限,而TIMESTAMP存储的时间上限只能到‘2038-01-19 03:14:07'
  • DATETIME 不带时区属性,需要前端或者服务端处理,但是仅从数据库保存数据和读取数据而言,性能更好
  • TIMESTAMP 带有时区属性,但是每次需要通过时区计算时间,并发访问时会有性能问题
  • 存储 DATETIME 比 TIMESTAMEP 多占用一部分空间

数值型时间戳(INT)

很多时候,我们也会使用 int 或者 bigint 类型的数值也就是时间戳来表示时间。

这种存储方式的具有 Timestamp 类型的所具有一些优点,并且使用它的进行日期排序以及对比等操作的效率会更高,跨系统也很方便,毕竟只是存放的数值。缺点也很明显,就是数据的可读性太差了,你无法直观的看到具体时间。

如果需要查看某个时间段内的数据


select * from t where created_at > UNIX_TIMESTAMP('2021-01-01 00:00:00');

DATETIME vs TIMESTAMP vs INT,怎么选?

每种方式都有各自的优势,下面再对这三种方式做一个简单的对比:


日期类型 占用空间 日期格式 日期范围 是否存在时区问题
DATETIME 8 字节 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~9999-12-31 23:59:59
TIMESTAMP 4 字节 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 ~2038-01-19 03:14:07
INT 4 字节 全数字时间戳 1000-01-01 00:00:01 之后的时间

TIMESTAMP 与 INT 本质一样,但是相比而言虽然 INT 对开发友好,但是对 DBA 以及数据分析人员不友好,可读性差。所以《高性能 MySQL 》的作者推荐  TIMESTAMP 的原因就是它的数值表示时间更加直观。下面是原文:

至于时区问题,可以由前端或者服务这里做一次转化,不一定非要在数据库中解决。

总结

本文比较了几种最常使用的存储时间的方式,我最推荐的还是 DATETIME。理由如下:

  • TIMESTAMP 比数值型时间戳可读性更好
  • DATETIME 的存储上限为 9999-12-31 23:59:59,如果使用 TIMESTAMP,则 2038 年需要考虑解决方案
  • DATETIME 由于不需要时区转换,所以性能比 TIMESTAMP 好
  • 如果需要将时间存储到毫秒,TIMESTAMP 要 7 个字节,和 DATETIME 8 字节差不太多

到此这篇关于MySQL中存储时间的文章就介绍到这了,更多相关MySQL存储时间内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中存储时间的最佳实践指南

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL中存储时间的最佳实践指南
    目录前言不要使用字符串存储时间类型MySQL 中的日期类型DATETIMETIMESTAMEPTIMESTAMP 的性能问题数值型时间戳(INT)DATETIME vs TIMEST...
    99+
    2024-04-02
  • 如何在Java中打包存储API:最佳实践指南
    在Java开发中,打包存储API是非常重要的一部分。它可以帮助我们将代码打包成可执行的文件,并且可以方便地进行存储和传输。这篇文章将介绍在Java中如何打包存储API的最佳实践,以及如何使用演示代码来实现。 第一步:创建Java项目 首先...
    99+
    2023-06-29
    存储 api 打包
  • 存储同步日志的最佳实践:GO 语言指南
    日志是软件开发中不可或缺的一部分。随着应用程序规模的增长,日志的数量和复杂度也会增加。为了保证程序的可靠性和可维护性,需要将日志存储在可靠的位置并进行同步。在本文中,我们将介绍如何使用 GO 语言实现存储同步日志的最佳实践,并提供示例代码...
    99+
    2023-08-10
    存储 同步 日志
  • Linux SysOps中SSH的最佳实践指南
    以下是Linux SysOps中SSH的最佳实践指南:1. 使用SSH密钥登录:使用SSH密钥而不是密码进行身份验证可以提高安全性。...
    99+
    2023-10-09
    Linux
  • Golang中map删除的最佳实践指南
    Golang中map删除的最佳实践指南 在Go语言中,map是一种非常重要的数据结构,它提供了一种键值对的映射关系。在使用map时,我们经常需要对map进行删除操作以及清空操作。本指南...
    99+
    2024-02-22
    删除 golang map go语言 内存占用 键值对
  • Python 最佳实践指南 2018 学
    基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现; PyPy:用 RPython...
    99+
    2023-01-30
    指南 Python
  • 存储数据时,Java有哪些最佳实践?
    在当今数字化时代,数据是企业的核心竞争力,因此如何存储数据变得至关重要。Java是一种广泛使用的编程语言,有许多最佳实践可用于存储数据。本文将介绍Java中存储数据的最佳实践,并提供相关的演示代码。 一、使用持久化框架 Java提供了许多持...
    99+
    2023-10-12
    http 编程算法 存储
  • MySQL SSL 连接配置指南与最佳实践
    MySQL SSL 连接配置指南与最佳实践引言:在当今互联网时代,保护敏感数据的安全至关重要。面对网络攻击日益复杂和猖獗的威胁,为数据库服务器配置SSL(Secure Sockets Layer)连接是非常重要的安全措施。本文将为读者介绍如...
    99+
    2023-10-22
    MySQL SSL:MySQL 安全套接字层(Secure Sockets Layer)连接 连接配置:配置 MySQL
  • Vue3中watch的用法与最佳实践指南
    目录前言🌟一、API介绍二、监听多个数据源三、侦听数组四、侦听对象五、总结✨前言🌟 本文以实验的形式,为大家揭示Vue3中watch的...
    99+
    2024-04-02
  • JavaScript命名约定的最佳实践指南
    目录前言1. 变量的命名约定2. 布尔值的命名约定3. 函数的命名约定4. 常量的命名约定5. 类的命名约定6. 组件的命名规则7. 方法的命名约定8. 私有函数的命名约定9. 全局...
    99+
    2024-04-02
  • PHP编码转码的最佳实践指南
    PHP编码转码的最佳实践指南 在Web开发中,经常会遇到需要对不同编码格式的内容进行转码的情况,特别是对于处理中文、特殊字符等情况更是常见。PHP作为一种流行的服务器端脚本语言,在处理...
    99+
    2024-04-02
  • PHP邮件传输的最佳实践指南
    随着互联网的发展,电子邮件已经成为了人们生活中不可或缺的一部分。而PHP是目前使用最广泛的服务器端脚本语言之一,可以方便地用于电子邮件的传输。本文主要介绍如何使用PHP进行邮件传输的最佳实践。 一、选择邮件传输协议 在使用PHP...
    99+
    2024-01-22
    PHP Mail SMTP 邮件传输 邮件服务器配置
  • PHP中实时异步编程和存储的最佳实践是什么?
    PHP是一种常用的服务器端编程语言,广泛应用于Web开发领域。在Web应用程序中,实时异步编程和存储是非常重要的。在本文中,我们将探讨PHP中实时异步编程和存储的最佳实践。 一、什么是实时异步编程? 实时异步编程是指在程序运行时,能够同时进...
    99+
    2023-10-07
    实时 异步编程 存储
  • 实时重定向缓存:Java中的最佳实践?
    在现代软件开发中,缓存是一项非常重要的技术。缓存可以减少对数据库的访问,降低系统负载,提高响应速度。但是,缓存也存在一些问题,例如缓存过期、缓存雪崩等。为了解决这些问题,实时重定向缓存(Real-time Redirection Cach...
    99+
    2023-06-22
    重定向 实时 缓存
  • Golang多线程编程的最佳实践指南
    Golang多线程编程的最佳实践指南 Go语言(Golang)是一种快速、简单且强大的编程语言,具有优秀的并发编程能力。通过支持原生的goroutine和channel,Golang为...
    99+
    2024-02-29
    多线程 golang 实践指南 go语言 并发访问
  • Laravel 和 Go 存储:Bash 中的最佳实践是什么?
    Laravel 和 Go 是目前非常流行的后端框架,它们都提供了一些非常方便的存储库。在 Bash 中使用这些存储库,可以让我们更加高效地管理数据。那么,在 Bash 中使用 Laravel 和 Go 存储库的最佳实践是什么呢?下面我们就...
    99+
    2023-09-19
    laravel 存储 bash
  • Apache中的PHP路径存储:最佳实践是什么?
    在使用Apache作为Web服务器的时候,我们经常需要将PHP脚本与Apache服务器进行集成。在此过程中,Apache服务器需要知道PHP脚本的存储路径才能正确地执行它们。这就引发了一个问题:在Apache中,如何存储PHP路径才能实现...
    99+
    2023-09-06
    存储 apache path
  • PHP SOAP 的最佳实践指南:解锁其最大潜力
    性能优化 启用缓存:启用 SOAP 客户机和服务器的缓存可以显着提高性能。这有助于减少对 Web 服务的重复调用,从而节省时间和资源。 优化 WSDL 文件:确保 WSDL 文件尽可能小和高效。避免不必要的复杂性和大型数据类型。 使用压...
    99+
    2024-03-15
    SOAP
  • 大数据存储:Python存储方案的最佳实践是什么?
    大数据存储已经成为了当今企业信息管理的重要组成部分,对于数据存储方案的选择也越来越重要。Python作为一种流行的编程语言,其在大数据存储方案中也有着广泛的应用。本篇文章旨在探讨Python存储方案的最佳实践。 一、为什么选择Python作...
    99+
    2023-11-04
    存储 面试 大数据
  • 函数命名约定和最佳实践指南
    在软件开发中,清晰且有意义的函数命名对代码的可读性至关重要,应遵循明确的命名约定:以动词或动词短语开头,例如 getuserdetails。使用骆驼式命名,例如 calculatetot...
    99+
    2024-04-12
    java php python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作