美文网首页
mysql 数据类型优化

mysql 数据类型优化

作者: lesliefang | 来源:发表于2020-03-04 23:14 被阅读0次

    高性能MySQL第三版第4章学习

    mysql show create table tablename 查看建表语句

    用sql创建表后一定要自信看看实际生成的schema

    Smaller is usually better

    IP 用整形存储, 因为 IP 本来就是 32 位的无符号整数, 为了方便阅读才4个为一组分开的。
    用 INET_ATON 和 INET_NTOA 函数转换

    Simple is good
    Avoid NULL if possible.

    不能为 NULL 显示标记为 NOT NULL
    if you’re planning to index columns, avoid making them nullable if possible

    INT(1) 和 INt(20) 存储上没有什么区别, 括号内的宽度只是对显示格式的一个约束,所以定义时不要加宽度。

    Float 4个字节,Double 8个字节, Double 精度和范围更高

    DECIMAL: 是精确小数(exact fractional numbers)。 为什么就做精确小数呢???因为 Float 和 Double 在计算机内的表示方法(一般是IEE754)无法精确的表示一个精度很高的小数(如 1/3 等),只能近似表示。
    那么 DECIMAL 为什么能表示呢??? 因为 DECIMAL 会通过一些方法自己计算,CPU 硬件是直接支持浮点运算的,因此Float 和 Double 运算非常块,而CPU 不支持 DECIMAL的运算,DECIMAL 运算是自己实现的,速度很慢。

    除了要求高精度的金融应用,一般应用用不到 DECIMAL 类型。

    一些高精度的小数可以转成 BIGINT 来表示,如万分之一分钱, 我可以统一乘以一万表示成 BIGINT。
    这样就避免了 Float的不精确和 DECIMAL 的计算代价。

    VARCHAR 通常会用 1到2个而外的字节存储字符串的长度,长度小于255就用1个字节存储长度, 大于255就用两个字节粗存储长度。

    DateTime 时区独立的,占8个字节
    TimeStamp 时区有关的,有时区信息,4个字节
    区别不大,一般推荐用 TimeStamp 因为节省空间

    底层没有 Boolean 类型, boolean 在底层用 tinyint 表示,占用 1个字节

    Badly written schema migration programs and programs that autogenerate schemas can cause severe performance problems
    自动生成的数据库schema 很危险,一定要检查,因为生成的不一定可靠,可能有性能问题, 如所有的string都用大的 VARCHAR 表示。
    大部分 ORM 都支持由实体生成 schema (code first 模式), 当然也支持由数据库表直接生成实体类(database first)

    相关文章

      网友评论

          本文标题:mysql 数据类型优化

          本文链接:https://www.haomeiwen.com/subject/oatglhtx.html