mysql时间索引和格式探讨
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时间索引和格式探讨相关推荐
- python mysql日期输出格式_Python/Shell/MySQL时间获取与格式转换
一.说明 时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下. 另外个人真不喜欢同样功能 ...
- 【踩坑】MySQL时间索引失效
项目中查时间数据段数据时,发现查询时间很长,RDS查了一下执行计划: 各列解析说明: id:表示执行的顺序,id的值相同时,执行顺序是从上到下,id的值不同时,id的值越大,优先级越高,越先执行 se ...
- mysql 时间索引无效_MYSQL时间范围查询索引失效
近期在做一个报表监控的项目,主要的查询条件就是时间,每天导入数据库的数据大概几万条,页面的查询范围最多限制在1个月,算下来1个月的数据量最多有300w,功能开发完后自己做了100多万的测试数据,并在作 ...
- 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 ...
- mysql 时间格式转换年月日时分秒
mysql 时间格式转换 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
- 【推荐】mysql联合 索引(复合索引)的探讨
Mysql联合 索引(复合索引)的使用原则 命名规则:表名_字段名 需要加索引的字段,要在where条件中. 数据量少的字段不需要加索引.最窄的字段放在键的左边. 如果where条件中是OR关系,必须 ...
- Mysql时间格式转换整理
时间格式转换整理 Mysql里的时间格式转换有DATE_FORMAT().STR_TO_DATE(),本文主要列出详细时间格式. 延展阅读链接: 60个Mysql日期时间函数汇总 Step 1:了解当 ...
- mysql时间字段使用索引
索引可以提高查询效率,平时按照时间查询经常遇到,所以就会给时间添加索引,但是添加索引怎么用呢? 首先创建一张表test_table 然后给时间字段创建索引 导入大量数据,可以使用存储过程 查看一下表中 ...
- mysql时间格式和Java时间格式对应
mysql时间格式和Java时间格式对应 在 MySQL 中有两种存储时间的数据类型 DATETIME 和 TIMESTAMP ,它们在数据库实际应用中,各有各的优势和劣势.本文将详细详解两个数据类型 ...
最新文章
- linux文件编辑操作,Linux下文本编辑及其文件操作
- linux系统文件分类,Linux系统文件概念和文件类型
- 深入理解阻塞socket和非阻塞socket
- Python学习6——条件,循环语句
- 如何选择和计算滤波电容?--电容使用详述
- 只有经验丰富的开发人员才能教您有关Java的5件事
- php 映射程序,windows磁盘映射技术分享
- mysql 嵌套if标签_对比Excel、MySQL、Python,分别讲述 “if函数” 的使用原理!
- zookeeper学习笔记001-Address already in use: bind启动报错
- R语言:data.table语句批量生成变量
- 关于跳转 + 传递消息,
- redchat怎么编写shell脚本_Linux如何编写shell脚本?
- python语言的赋值语句可以改变变量的类型吗_python 数据类型和变量
- ERROR:此文件包含病毒,已删除
- 【ubuntu如何录制gif图】
- 视频配音怎么制作?这两个文字转语音工具,声音自然好听
- 【量化课堂】彼得·林奇的成功投资
- (mac版本)IntelliJ IDEA 常用快捷键
- SitePoint播客#26:力量在于您
- Take Me To Your Heart by MLTR
热门文章
- Mnt_namespace分析
- 一代二代三代测序的基本原理及区别是啥啊?
- PLSQL Developer软件使用大全
- java案例大象和鹦鹉_世界十大最聪明动物 大象的“高智商”惹不起【图】
- 【经典游戏】坦克大战 Unity2D项目实战(保姆级教程)
- flamingo的中文意思是什么,《flamingo什么意思》在线 - 闰看365影院
- QT安装、添加或删除、更新组件
- css 反色_使用CSS和JavaScript检测反色
- 定义一个数组,用函数交换数组中的两个元素(C语言)
- 如何提高网吧人气,改善客源流失问题(转)