美文网首页
Mysql性能优化-1.字段设计

Mysql性能优化-1.字段设计

作者: 笨鸡 | 来源:发表于2019-05-08 22:57 被阅读0次

    1.IP地址存储

    例:127.0.0.1 一个段为(0-255)二进制表示为(00000000-11111111)8位 一个字节
    如果用varchar(15)存储utf-8字符的话需要45个字节,如果用int存,只要4个字节
    Mysql > select inet_aton("127.0.0.1") 对应的整数为 2130706433

    2.尽量使用整数表示字符串

    当字段具有离散性时,可以用数字来替代字符串,如(男,女,未知) -->(1,2,3)
    Mysql内部的枚举(单选)类型和集合(多选)类型,不推荐(维护成本高)

    create table enum_test(e ENUM('fish','apple','dog') not null);
    insert into enum_test(e) values ('fish'),('dog'),('apple');
    select * from enum_test;
    
    mysql_enum.png

    替代方案,关联表user, gender

    • user
    id name gender_id
    1 张三 1
    2 李四 3
    • gender
    id title
    1
    2
    3 保密

    3.字段精度,变长和定长

    存储37.85元,浮点数不精确
    典型方案:price decimal(8,2);定点数,有2位小数的定位数
    另外方案:price int,bigint.整数。小单位,大数额 例:3785(分) 37850(厘)

    定长类型: 存储空间固定。int,float,double,char,date,time,datetime,year,timestamp.
    变长类型:存储空间可变。varchar,decimal,text.


    字段大小.png

    varchar 65535 占用字段总空间
    text 65535 独立存储,不占用字段总空间

    4.原则:尽可能选择小的数据类型

    5.原则:尽可能使用not null

    5.1 not null的处理要比null字段的处理效率高些!
    5.2 不需要判断是否为null
    5.3 null在Mysql中不好处理,存储需要额外空间,运算也需要特殊的运算符


    mysql_null.png

    除非使用is null,is not null。
    5.4使用一个特殊的数据进行占位:
    int not null default 0.
    string not null default "".

    6.原则:字段具有逻辑含义并注释完整

    gender int comment "性别"

    7.原则:单表字段数量不宜过多

    8.原则: 可以预留字段

    id, name, age, email, phone, filed1, filed2, filed3 ...

    相关文章

      网友评论

          本文标题:Mysql性能优化-1.字段设计

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