MySQL数据类型

来源:互联网 发布:淘宝客服不回消息 编辑:程序博客网 时间:2024/05/29 06:47

本篇文章主要是介绍MySQL中数据类型优化的方法,选择合适的数据类型对获得高性能至关重要,本文知识点总结:

  • 使用小而简单的合适的数据类型,尽量不要使用NULL值
  • 在关联条件的列,尽量时候使用相同的数据类型
  • 使用整型来定义标识列
  • 固定长度的列尽量使用char代替varchar,否则在临时表和排序的时候导致按最大长度分配内存
  • 不要滥用ENUM和SET

实数类型

实数是带有小树部分的数字,Mysql有支持精确的,有不支持精确的
- FLOAT DOUBLE 是进行近似的浮点运算
- DECIMAL 进行精确的计算,在对精度要求很高的时候才使用(比如财务数据)

字符串类型

  • 在这些情况下可以使用VARCHAR
    • 列更新少;
    • 使用了想UTF-8这样复杂的字符集;
    • 字符串的最大长度比平均长度大很多;
  • CHAR适合存储很短的字符串,比如
    • 存储的是定长的数据,比如身份证号,手机号,密码,银行卡号,订单号,支付号等…

在存储字符串方面,最好的策略就是分配真正需要的空间,比如存储姓名,VARCHAR(20)VARCHAR(100)要合适。

枚举类型

有的时候会使用枚举代替常用的字符串类型,比如性别,订单状态…

  1. 在MySQL中枚举字段排序并不是定义的字符串排序,而是
    按照内部存储的数字排序的,最好的方法就是按照字母的顺序来定义,ENUM(‘apple‘,’book’,’cook”)
  2. 避免这样使用枚举ENUM(‘1’,’2’,’3’)

    日期和时间类型

    1.TIMESTAMP显示的时间依赖于时区

  3. DATETIME与时区无关
  4. 尽量使用TIMESTAMP,它比DATATIME空间效率更高
    4.可以使用BIGINT存储微妙级别的时间戳,或使用DOUBLE存储秒后面的小数部分

    特殊类型的数据

    某些类型的数据并不直接与内置的数据类型有关,比如IPv4,它实际上是一个32位无符号的整数,而不是字符串,MySQL提供了INET_ATON() INET_NTOA进行转换