文档章节

Mysql 数据类型优化(三)

@ccny
 @ccny
发布于 2015/10/24 10:13
字数 919
阅读 118
收藏 7

一、日期与时间类型

    MySQL 可以使用许多类型来保存日期和时间值。

    如:YEAR和DATE。MySQL能存储的最小时间粒度为秒(MariaDB支持微秒级别的时间类型)。但是MySQL也可以使用微妙级的粒度进行临时运算,我们会展示怎么绕开这种存储限制。

    DATETIME

        这个类型能保存大范围的值,从1001年到9999年,精度为秒。它把日期和时间封装到格式为YYYYMMMDDHHHMMSS的整数中,与时区无关。使用8个字节的存储空间。

默认情况下,MySQL以一种可排序的无歧义的格式显示 DATETIME值,例如“2015-10-24 09:57:33”.这是ANSI标准定义的日期和时间表示方法。

    TIMESTAMP

    就像它的名字一样,TIMESTAMP类型保存了1970年1月1日0点(格林尼治标准时间)以来的秒数,它和UNIX时间戳相同。TIMESTAMP只使用4个字节的存储空间,因此它的范围比DATETIME小的多:只能存储 1970 到 2038年。

如果在多个时区存储或访问数据,TIMESTAMP和DATETIME的行为将很不一样。

TIMESTAMP提供的值与时区有关系,后者刚保留文本表示的日期和时间。

也可以指定TIMESTAMP的  添加 与更新的行为,TIMESTAMP列的默认为NOT NULL

除了特殊的行为之外 ,通常也应该尽量用TIMESTAMP,因为它比DATETIME空间效率更高有时候人们会将Unix时间戳存储为整数值,但这不会带来任何收益。用整数保存时间戳的格式通常不方便处理,所以不推荐这样做。


如果需要存储比秒更小的粒度日期和时间怎么办?

MySQL目前没有提供合适的数据类型,但是可以通过使用自己的格式存储: 可以使用BIGINT类型存储微级别的时间戳,或者使用DOUBLE存储秒之后的小数部分。这两种方式,都可以,或者可以使用MariaDB替代MySQL

二、位数据类型

    MySQL有少数几种存储类型使用紧凑的位存储数据。所有这些位类型,不管底屋存储格式和处理方式如果 ,从技术上来说都是字符串类型。

    BIT

    在MySQL 5.0 之前,BIT是TINYINT的同义词。但是在MySQL5.0以及更新的版本,这是一个特性完全不同的数据 类型。

    BIT列,可以存储一个或多个ture/false 值。BIT(1)定义一个包含单个位字段,BIT(2)存储2个位,BIT例最大长度是64个位。

MySQL把BIT当作字符串类型,而不是数字类型,当检索BIT(1)的值是一个包含二进制0或1的字符串,而不是ASCII码的“0”或“1”。然而在数字 上下文场景中检索时,结果将是位字符串转换成的数字 。需要和另外的值比较结果 ,一定要记得这一点。

对于大部分应用,最好避免使用这种类型。

SET

    如果需要在保存很多的true/false 值,可以考虑,合并这些列到一个SET数据类型,它在MySQL内部是以一系列打包的位的集合来表示的。这样就有效的我利用了存储空间,并且MySQL有像FIND_IN_SET()和FILED()这样的函数,方便地在查询 中使用。

缺点:改变列的定义代价较高:需要ALTER TABLE ,这对大表来说是非常昂贵的操作。



© 著作权归作者所有

@ccny

@ccny

粉丝 14
博文 114
码字总数 27048
作品 0
东城
架构师
私信 提问
为什么sql 语句逻辑相同,性能却差距巨大

一 索引字段函数操作 对于索引字段做函数操作,可能破坏索引值的有序性,因此优化器就决定放弃走树搜索功能 二 隐式类型转换 数据类型转换的规则是什么? 为什么有数据类型转化,就需要走全索...

writeademo
2018/12/27
0
0
MySQL学习总结----索引

MySQL学习总结----索引 ================================================================================= 一、索引 ================================================================......

doublelinux
2017/10/16
0
0
等等!这两个mysql慢查询的坑我已经替你们踩了

慢sql一 问题发现 将应用发布到生产环境后,前端页面请求后台API返回数据,发现至少需要6s。查看到慢sql: 复现慢sql 执行sql: 查看耗时: 一共耗时为2658ms 查看执行计划: 执行计划结果:...

新华智云
2018/10/22
0
0
系统的撸一遍MySQL - MySQL读书笔记

作为一个工作6年的PHP工程师,说实话从来没有系统的去看过一本MySQL的书,哪怕入门的书,表示真的很汗颜。。。 记得最早学数据库的时候学过sql server、oracle 但是最终没有搞Java、也没有搞...

logbird
2016/08/20
64
3
mysql--------四种索引类型

一、索引的类型 mysql索引的四种类型:、、和。通过给字段可以,提高项目的并发能力和抗压能力。时mysql中的一种优化方式。索引的作用相当于,可以根据目录中的页码。 主键索引: 主键是一种唯...

切切歆语
2018/02/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基础工具类

package com.atguigu.util;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import com.alibaba.druid......

architect刘源源
今天
41
0
P30 Pro劲敌!DxO官宣新机:排行榜又要变

5月26日晚间,DxOMark官方推特预告,将在5月27日公布一款新机型的DxOMark评分,猜猜是哪款? 网友猜想的机型有:红米K20、谷歌Pixel 3a、索尼Xperia 1、诺基亚9 PureView等。 DxOMark即将公布...

linux-tao
昨天
15
0
Ubuntu18.04.2窗口过小不能自适应(二次转载)

解决Ubuntu在虚拟机窗口不能自适应 2018年09月06日 16:20:08 起不了名儿 阅读数 855 此博文转载:https://blog.csdn.net/nuddlle/article/details/77994080(原地址) 试了很多办法这个好用 ...

tahiti_aa
昨天
2
0
死磕 java同步系列之CountDownLatch源码解析

问题 (1)CountDownLatch是什么? (2)CountDownLatch具有哪些特性? (3)CountDownLatch通常运用在什么场景中? (4)CountDownLatch的初始次数是否可以调整? 简介 CountDownLatch,可以...

彤哥读源码
昨天
6
0
Nginx提供下载apk服务

有时候我们可能需要提供文件或者其他apk下载链接,通过 nginx 配置可以很简单地实现。 server {    listen 80;    server_name download.xxx.com;    root app;    locati...

Jack088
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部