mysql时间

背景

前几天朋友发了一个问题

-- 表结构 type/status/create_time
-- type区分度比status高,应该如何加索引1. type
2. type status create_time
3. type create_time

几个人讨论后有个人说不需要create_time,说create_time只有在 = 才生效
但按我自己的理解是create_time也可以走索引范围查询
因此搜了一些资料加深自己的理解

日期索引

先说结论,日期索引是可以走范围查询的
如下展示了mysql中单索引和联合索引的使用

我主要是纠结联合索引的画法
后面参考了CSDN的一篇文章

而取舍就是是否需要再加一个status
即(type status create_time) 和 (type create_time)
由于status区分度不高,实际上可以不加
加了就是耗费点空间,按我目前的知识是这么理解的

几种时间

类型 格式 范围
Date YYYY-MM-DD ‘1000-01-01’ to ‘9999-12-31’
DATETIME YYYY-MM-DD hh:mm:ss.000000 ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’
TIMESTAMP YYYY-MM-DD hh:mm:ss.000000 ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC

timestamp

timestamp是携带时区的,存储时以UTC存储
mysql存储timestamp时会转换为UTC存储,取出来的时候会恢复成当前服务器的TimeZone
默认下time zone是服务器的时间
JDBC中,我们可以给每个连接设置time zone
如果你存进数据库后,修改了连接的serverTimeZone,那么取出来的值也会不一样
比如在GMT+8时,取出来的值是2022-7-8 08:57:35
那么GMT+6时取出来的值是2022-7-8 06:57:35

注意DATETIME不携带时区

timestamp最大支持2038年是因为Int最大2147483647

其他

  • myql 8.0.19后可以给TIMESTAMP or DATETIME在表中指定time zone offset
  • 非法的DATE, DATETIME, or TIMESTAMP会被转化为0,如果SQL mode 支持NO_ZERO_DATE的话
  • mysql 8.0.22后可以通过CAST和at time zone将timestamp转换成datetime
-- mysql会自动识别一些格式的时间
-- 等价于create_time > '2022-07-01'
SELECT * FROM demo WHERE create_time > '22:07:01';
-- 等价于create_time > '0000-00-00',因为50不是一个合法的月份
SELECT * FROM demo WHERE create_time > '22:50:01';
-- create_time为timestamp类型,转换为DATETIME
SELECT *, CAST(create_time AT TIME ZONE INTERVAL '+00:00' AS DATETIME) ut FROM time_demo

mysql时间索引和格式探讨相关推荐

  1. python mysql日期输出格式_Python/Shell/MySQL时间获取与格式转换

    一.说明 时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下. 另外个人真不喜欢同样功能 ...

  2. 【踩坑】MySQL时间索引失效

    项目中查时间数据段数据时,发现查询时间很长,RDS查了一下执行计划: 各列解析说明: id:表示执行的顺序,id的值相同时,执行顺序是从上到下,id的值不同时,id的值越大,优先级越高,越先执行 se ...

  3. mysql 时间索引无效_MYSQL时间范围查询索引失效

    近期在做一个报表监控的项目,主要的查询条件就是时间,每天导入数据库的数据大概几万条,页面的查询范围最多限制在1个月,算下来1个月的数据量最多有300w,功能开发完后自己做了100多万的测试数据,并在作 ...

  4. Mysql 时间格式默认空串 ‘0000-00-00 00:00:00‘ select抛出异常的解决方法

    Mysql 时间格式默认空串 '0000-00-00 00:00:00' select抛出异常的解决方法 参考文章: (1)Mysql 时间格式默认空串 '0000-00-00 00:00:00' s ...

  5. mysql 时间格式转换年月日时分秒

    mysql 时间格式转换 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

  6. 【推荐】mysql联合 索引(复合索引)的探讨

    Mysql联合 索引(复合索引)的使用原则 命名规则:表名_字段名 需要加索引的字段,要在where条件中. 数据量少的字段不需要加索引.最窄的字段放在键的左边. 如果where条件中是OR关系,必须 ...

  7. Mysql时间格式转换整理

    时间格式转换整理 Mysql里的时间格式转换有DATE_FORMAT().STR_TO_DATE(),本文主要列出详细时间格式. 延展阅读链接: 60个Mysql日期时间函数汇总 Step 1:了解当 ...

  8. mysql时间字段使用索引

    索引可以提高查询效率,平时按照时间查询经常遇到,所以就会给时间添加索引,但是添加索引怎么用呢? 首先创建一张表test_table 然后给时间字段创建索引 导入大量数据,可以使用存储过程 查看一下表中 ...

  9. mysql时间格式和Java时间格式对应

    mysql时间格式和Java时间格式对应 在 MySQL 中有两种存储时间的数据类型 DATETIME 和 TIMESTAMP ,它们在数据库实际应用中,各有各的优势和劣势.本文将详细详解两个数据类型 ...

最新文章

  1. linux文件编辑操作,Linux下文本编辑及其文件操作
  2. linux系统文件分类,Linux系统文件概念和文件类型
  3. 深入理解阻塞socket和非阻塞socket
  4. Python学习6——条件,循环语句
  5. 如何选择和计算滤波电容?--电容使用详述
  6. 只有经验丰富的开发人员才能教您有关Java的5件事
  7. php 映射程序,windows磁盘映射技术分享
  8. mysql 嵌套if标签_对比Excel、MySQL、Python,分别讲述 “if函数” 的使用原理!
  9. zookeeper学习笔记001-Address already in use: bind启动报错
  10. R语言:data.table语句批量生成变量
  11. 关于跳转 + 传递消息,
  12. redchat怎么编写shell脚本_Linux如何编写shell脚本?
  13. python语言的赋值语句可以改变变量的类型吗_python 数据类型和变量
  14. ERROR:此文件包含病毒,已删除
  15. 【ubuntu如何录制gif图】
  16. 视频配音怎么制作?这两个文字转语音工具,声音自然好听
  17. 【量化课堂】彼得·林奇的成功投资
  18. (mac版本)IntelliJ IDEA 常用快捷键
  19. SitePoint播客#26:力量在于您
  20. Take Me To Your Heart by MLTR

热门文章

  1. Mnt_namespace分析
  2. 一代二代三代测序的基本原理及区别是啥啊?
  3. PLSQL Developer软件使用大全
  4. java案例大象和鹦鹉_世界十大最聪明动物 大象的“高智商”惹不起【图】
  5. 【经典游戏】坦克大战 Unity2D项目实战(保姆级教程)
  6. flamingo的中文意思是什么,《flamingo什么意思》在线 - 闰看365影院
  7. QT安装、添加或删除、更新组件
  8. css 反色_使用CSS和JavaScript检测反色
  9. 定义一个数组,用函数交换数组中的两个元素(C语言)
  10. 如何提高网吧人气,改善客源流失问题(转)