MySQL调优(5)-数据类型优化

数据类型

整形:

可以使用的几种整数类型:TINYINT,INT,BIGINT分别使用1,4,8个字节存储空间 尽量使用满足需求的最小数据类型

字符和字符串

    char 固定长度的字符串,最大长度255,自动trim,写查高效,空间换时间,适合存储固定长度的字符串 varchar 变长字符串 : varchar(n) n小于等于255使用额外一个字节保存长度,n>255使用额外两个字节保存长度,依次类推 varchar(5)与varchar(255)保存同样的内容,硬盘存储空间相同,但内存空间占用不同,是指定的大小

时间类型

    datetime 占用8个字节 与时区无关 可保存到毫秒 适配日期函数 timestamp 占用4个字节 精确到秒 采用整形存储(时间戳) 依赖数据库设置的时区 支持自动更新timestamp列的值 date 3个字节 适配日期函数 date类型用于保存1000-01-01到9999-12-31之间的日期

IP地址

人们经常使用varchar(15)来存储ip地址,然而,它的本质是32位无符号整数不是字符串,可以使用INET_ATON()和INET_NTOA函数在这两种表示方法之间转换 案例: select inet_aton(‘1.1.1.1’) select inet_ntoa(16843009)

更小的更好

应该尽量使用可以正确存储数据的最小数据类型,更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少

注意,建表时候指定的长度与字段值实际占用的空间无关,只是一个检验限制的功能,实际占用的空间与数据类型相关

1、整型比字符操作代价更低,因为字符集和校对规则是字符比较比整型比较更复杂

2、使用mysql自建类型(date、timestamp、datetime)而不是字符串来存储日期和时间

3、用整型存储IP地址(函数转换)

避免Null

如果查询中包含可为NULL的列,对mysql来说很难优化,因为可为null的列使得索引、索引统计和值比较都更加复杂,坦白来说,通常情况下null的列改为not null带来的性能提升比较小,所有没有必要将所有的表的schema进行修改,但是应该尽量避免设计成可为null的列

经验分享 程序员 微信小程序 职场和发展