mysql 性能-数据类型篇

    xiaoxiao2021-03-25  83

    1:选择满足你存储数据最小的类型;

    2:尽量避免列为null,索引列最好设定为not null;

    3:简单就好,比如用mysql的date类型存储时间,整形存储ip;

    4:整数类型:tinyint 8位  -128---127 ,smallint 16位  -32768---32767,mediumint24位    --8388607--8388608 ,

    int32位     -2147483647- ---2147483648   bigint64位 ,float(4字节存储)和double(8字节)类型支持标准浮点运算,

    decimal 支持小数运算,用于存储精确的小数,比binint大,实现是把数字打包成2进制字符串,四个字节存9个数字,小数点一个字节;

    5: 字符串类型

    varchar 可变长字符串,如果表使用row_format=fixed创建的话每一行都使用定长存储;

    varchar擅长的情况:1 字符串最大长度比平均长达大很多,2列的更新很少 3,使用类似utf-8这样复杂的字符集;

    char是定长的,擅长情况:1适合存储很短的,2或者数据长度差不多的,3对于经常变更的数据也擅长,varcahr比char更容易产生碎片;

    6:blob 和text 类型存储大数据,分别采用2进账,和字符形式,在对text和blob排序时只排序max_sort_length长度的数据

    tinytext   ,smalltext, text ,mediumtext,longtext

    tinyblob, smallblob, blob,mediumblob,longblob

    7:枚举类型

    有时枚举可以代替字符串,把一些不重复的字符串存储成一个预定义的集合,这样可以压缩表的大小,枚举里面的字符串理论上小于65535,但是一般设置是小于3000。

    8时间类型

    datetime与时区无关,8个字节存储,范围1001-9999

    timestamp时间戳,4个字节,范围1970-2038    ,  from_unixtime把时间戳转换为日期,unix_timestamp把日期转换为时间戳。

    9:位数据类型'

    bit,

    set可以保存很多true/false值find_in_set();  

    create table acl ( perm set('can_read', 'can_write') not null  );

    10:标识符

    选择与其相关列相同的类型,最好使用整形;如果需要存储uuid,最好使用hex函数和unhex函数,然后存在binary(16)的类型中;

    11:IP地址是32位无符号整数,可以用整数存储,用函数转换inet_aton(),inetntoa();

    12:错误:

    (1)不要使用太多的列,数千个那种。。,(2)不用有太多的关联,单个查询最好在12个表之内,才能保证性能和并发;

    (3)注意枚举(enum)和集合(set) 枚举是设计为存储定义值用的一个值,而集合是定义值中的一个或多个值;

    13:缓冲表和汇总表;

    14:修改表可以只修改。frm的值;

    15:tinyblob   :一个tinyblob 可以存储255 (21)个字节,有一个字节的长度前缀;

    16:tinytext:一个tinytext可以存储255 (21)个字符,有一个字节的长度前缀;

    17:  如果为数字列指定zerofill,mysql会自动将unsigned 属性添加到改列;

    18: 数字类型的列当插入超出范围的数据时,根据sql_mode决定是否出现报错,如果可以不报错,出入值为该类型允许的最大值;

      

    转载请注明原文地址: https://ju.6miu.com/read-32363.html

    最新回复(0)