zoukankan      html  css  js  c++  java
  • mysql数据类型总结

    数据类型优化
    1、尽量使用能正常存储数据的最小数据类型(更快。占用更少的磁盘、内存和cpu)
    2、尽量使用简单类型。(如整型比字符操作代价低)
    3、尽量避免使用NULL(能够通过加默认值设置not null)

    数据类型:支持别名。如integer,bool,numeric
    1、时间
    DATETIME和TIMESTAMP都精确到秒。通常应该尽量使用timestamp。

    datetime
    能保存大范围的值,从1001年到9999年把日期和时间封装到格式YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。
    timestamp
    存储秒数,仅仅用4个字节,范围比datetime小:仅仅能表示从1970到2038年。日期的显示依赖于时区。
    默觉得not null,假设插入时没有指定值,则默认值为当前时间。

    2、整型
    tinyint(8位),smallint(16位),mediumint(24位),int(32位),bigint(64位)
    整型有可选的unsigned属性,表示正数
    整数计算一般使用64位的bigint
    能够为整数指定宽度(仅仅是为用来规定mysql的交互工具显示字符的个数,不会限制值的合法范围

    3、实数
    精确类型:float,double(不适合用于货币的计算)
    不精确类型:decimal,decimal仅仅是一种存储格式,在计算中decimal会转换成double类型
    能够指定精度,指定小数点前后所同意的最大位数
    建议仅仅使用数据类型,不要指定精度
    4、字符串类型
    char 
    当存储为char类型时。mysql会删除全部的末尾空格(检索时),char值会依据须要採用空格进行填充以方便比較。
    适合存储非常短的字符串或者全部值接近相同的长度,常常变更的数据也更适合用char存储
    varchar
    仅使用必要的空间,但有一种情况例外,即若建表时使用row_format=fixed。则每一行都使用定长存储
    须要1或2个额外字节记录字符串长度(若列最大长度小于等于255,仅仅须要一个字节。依次类推)
    适用情况:
    • 字符串列最大长度比平均长度大非常多
    • 列更新少。不存在碎片问题
    • 使用了像utf-8这样复杂的字符集,每一个字符都使用不同的字节数来存储
    binary和varbinary存储二进制字符串(字节码),填充binary使用''填充。检索时也会去掉填充值

    5、BLOB和TEXT类型
    二进制方式存储:tinyblob。smallblob(blob的同义词),mediumblob,longblob
    字符方式存储:tinytext,smalltext(text的同义词),mediumtext,longtext

    6、使用枚举(ENUM)取代字符串类型
    存储时很紧凑。会依据列表值的数量压缩到一个或两个字节中
    create table enum_test(
         e enum('fish','apple','dog') not null
    )
    insert into enum_test(e) values('fish'),('dog'),('apple')
    数据插入后存放在表中的数据实际上是整数而不是字符串。

    7、位数据类型
    bit
    bit(1)定义一个包括单个位的字段。bit(2)存储两个位。bit列的最大长度是64位。
    mysql把bit当作字符串类型,而不是数字类型。
    最好避免使用这样的类型,假设要用一个bit存储一个true/false值,替代方法是创建一个char(0)。能够保存空值NULL或者长度为0的字符串。
    set
    保存非常多true/false值的集合
    比如
    create table acl(
         perms set('can_read','can_write','can_delete') not null
    )
    insert into acl(perms) values('can_read,can_delete');
    长处:有效利用存储空间,能够使用find_in_set()等函数
    缺点:改变列定义的代价太高:须要alter table,对大表来说很昂贵。并且无法在set列上通过索引查找

    參考:《高性能Mysql》


  • 相关阅读:
    一次springboot applicationContext.getBean(clazz)空指针
    Dubbo返回自定义异常之UndeclaredThrowableException、InvocationTargetException
    MyBatis源码学习计划
    MySQL分组修改排序序号
    查看Linux服务器连接数,Oracle表和索引分析
    转载:查看Oracle连接数
    转载:查看ORACLE最耗时的SQL
    java 获取网络图片
    java POI html生成word(html里面带图片,Linux系统导出图片无法显示)
    java解决poi导出excel使用SXSSF时“Attempting to write a row[?] in the range [0,?]that is already written to disk.”异常
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7228719.html
Copyright © 2011-2022 走看看