mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些?

索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言哪个类型的效率更好一些。

DATE: (YYYY-MM-DD) 范围 '1000-01-01' to '9999-12-31' .

DATETIME: (YYYY-MM-DD HH:MM:SS) 范围 '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. 支持自动更新

TIMESTAMP: (YYYY-MM-DD HH:MM:SS)范围 '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC. 支持自动更新

INT: (整数) 范围 '1970-01-01 00:00:01' to '2038-01-19 03:14:07'

(这里 DATETIME,TIMESTAMP都支持0-6位的时间精度,这里就不讲了)

注意 TIMESTAMP 会先将用户输入转换成UTC时间进行存储,查询时也会将时间转换成当前UTC时间,所以当数据库服务器的时区跟查询客户端时区不一致时,会出现查询不到的情况。

再看MYSQL对这个几个类型的存储情况。

类型

before MySQL 5.6.4

Storage as of MySQL 5.6.4

DATE

3 bytes, 小端字节

3 bytes, 小端字节

DATE

3 bytes, 小端字节

3 bytes, 小端字节

TIMESTAMP

4 bytes, 小端字节

4 bytes + 毫秒存储, 大端字节

DATETIME

8 bytes, 小端字节

5 bytes + 毫秒存储, 大端字节

INT

4 bytes

4 bytes

DATE : 3个字节整型 YYYY×16×32 + MM×32 + DD

TIMESTAMP : 4个字节整型,存储UTC时间秒。

DATETIME:

1.(5.6.4 之前)8个字节, 其中4个字节整型 YYYY×10000 + MM×100 + DD 和 4个字节整型HH×10000 + MM×100 + SS

2.(5.6.4 之后)

1 bit 符号位 (1= 整数, 0=负数)

17 bits year*13+month (year 0-9999, month 0-12)

5 bits day (0-31)

5 bits hour (0-23)

6 bits minute (0-59)

6 bits second (0-59)

---------------------------

40 bits = 5 bytes

INT 4个字节整型,存储时间秒

毫秒存储位

精度

存储空间

0

bytes

1,2

1 bytes

3,4

2 bytes

4,6

3 bytes

对各个时间类型有个整体的了解以后我们分析一下。

其中DATE字段精度不够不参与对比。

对比一下 DATETIME 、 TIMESTAMP、 INT

从存储时间范围看 DATETIME > TIMESTAMP = INT

从使用方便上看 带有自动更新 DATETIME , TIMESTAMP > INT

从时间精度看 DATETIME > TIMESTAMP > INT

从存储空间上看,同一精度下DATETIME > TIMESTAMP = INT

从查询速度上看,底层都是整型存储,所以 DATETIME = TIMESTAMP = INT

不考虑存储空间优化的情况下,DATETIME是最优的时间存储类型

考虑存储空间的情况下,TIMESTAMP是最优的时间存储类型

作者:Brown_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Newtonsoft.Json反序列化(Deserialize)出错:Bad JSON escape sequence

使用Newtonsoft.Json反序列化收到的字串为JObject或其它支持的数据模型,有时错误,提示如下: Bad JSON escape sequence: \c. Path idno, line 5, position 34. 甚纳闷之。遂搜索资料,略有小获,其非法分界符所致。合法的…

玩转oracle 11g(33):无监听程序

故意操作删除监听 直接配置监听即可

[剑指offer]面试题第[2]题[JAVA][替换空格][函数][字符串]

【问题描述】 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 【解答思路】 找到空格替换空格 2.1 新建字符串,找到空格就替换,非空格添加原…

mysql安装条款_mysql 安装注意

mysql 远程连接赋予权限:GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY datech WITH GRANT OPTION;FLUSH PRIVILEGES;MySQL 5.1采用了基于密码混编算法的鉴定协议,它与早期客户端(4.1之前)使用的协议不兼容。如果你将服务器升级到4.1之上&#xf…

LeetCode 三数之和 — 优化解法

LeetCode 三数之和 — 改进解法 题目:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a b c 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重…

[剑指offer]面试题第[3]题[JAVA][从尾到头打印链表][栈]

【问题描述】 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 /** * public class ListNode { * int val; * ListNode next null; * * ListNode(int val) { * this.val val; * } * } * */【解答思路】 1…

java学习(126):throw向上抛出异常

//throw抛出异常 import java.util.Scanner; public class test66{static class A {void d() throws Exception {int a, b, c;Scanner in new Scanner(System.in);System.out.println("亲输入a的值");a in.nextInt();System.out.println("请输入b的值");…

mysql存储过程并行_Mysql存储过程的执行顺序问题

Mysql存储过程的执行顺序问题SQL code:CREATE TABLE t_a (a_id int(11) NOT NULL AUTO_INCREMENT,a_name varchar(30) NOT NULL DEFAULT N/A,PRIMARY KEY (a_id)) ENGINEMyISAM DEFAULT CHARSETutf8;CREATE TABLE t_b (b_id int(11) NOT NULL AUTO_INCREMENT,b_name varchar(30…

remove()方法

remove()方法 描述 列表 remove() 方法通过指定元素的值来移除列表中某个元素的第一个匹配项,如果这个元素不在列表中会报一个异常。 语法 remove() 方法语法: L.remove(obj) 参数 obj -- 要从列表中移除的元素的值。返回值 该方法没有返回值&#xff0c…

[Java]集合的小抄 Java初学者必备

文章目录【背景】CollectionsListArrayList优势操作劣势操作LinkedList优势劣势最基本的两种检索集合中的所有对象的方法:CopyOnWriteArrayList补充说明StackMapMap 的常用方法:HashMapLinkedHashMapTreeMapConcurrentHashMapConcurrentSkipListMap补充说…

excel生成mysql语句_通过SQL语句直接实现Excel与数据库的导入导出

1、在SQL数据库中直接从Excel里面查询数据:select \* fromOPENROWSET(MICROSOFT.JET.OLEDB.4.0,Excel 5.0;HDRYES;DATABASEc:\\test.xls,sheet1$)2、从Excel文件中,导入数据到SQL数据库中,select \* into 表 from![](http://images.csdn.net/syntaxhighlighting/Out…

基础知识小记:

什么时候用这些循环&#xff1f; 1,、for(i;i<n;i) 知道循环的起止数, 循环中需要用到不断递增/递减的变量 2、for(String s:slist) 叫foreach循环, 遍历数组/集合中元素用的 为了减少代码量 3、while 不知道确切的循环次数, 但知道循环结束条件时使用 4、do while 先执行一…

java学习(127):finally语句

finally作为异常处理的一部分&#xff0c;它只能用在try/catch语句中&#xff0c;并且附带一个语句块&#xff0c;表示这段语句最终一定会被执行&#xff08;不管有没有抛出异常&#xff09;&#xff0c;经常被用在需要释放资源的情况下。 之前在写爬虫的时候数据库连接的频率…

[剑指offer]面试题第[6]题[JAVA][旋转数组的最小数字][二分法]

####【问题描述】 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转&#xff0c;输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转&#xff0c;该数组的最小值为1。 NOTE&#xff1a;给出…

mysql合并多条纪录字段_Mysql应用mysql合并多条记录的单个字段去一条记录编辑

《MysqL应用MysqL合并多条记录的单个字段去一条记录编辑》要点&#xff1a;本文介绍了MysqL应用MysqL合并多条记录的单个字段去一条记录编辑&#xff0c;希望对您有用。如果有疑问&#xff0c;可以联系我们。测试用表结构&#xff1a;代码如下:---- 表的结构 tet--CREATE TABLE…

git之项目上传

git之项目上传 需求&#xff1a;将项目代码上传至github 前期准备&#xff1a; 1.github账号注册 2.安装git环境&#xff0c;可以打开且使用git shell. 3.生成SSH key并与github账号绑定 步骤&#xff1a; 1.进入gitshell 2. 进入到项目指定的目录下&#xff0c;适用git命令初始…

[leedcode][409][java]

####【题目描述】 给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。在构造过程中&#xff0c;请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。注意: 假设字符串的长度不会超过 1010。示例 1:输入: "abccccdd…

玩转oracle 11g(35):rman备份-参数文件spfile损坏恢复

1.参数文件spfile损坏恢复 (1)选择“开始”“运行”&#xff0c;输入cmd&#xff0c;按回车。 (2)输入“ set oracle_siddocare”&#xff0c;按回车。 &#xff08;oracle_sid根据实际名称填写&#xff09; (3)输入“rman target /”&#xff0c;按回车 如果在64bit下安装…