您的位置:首页 > 数据库 > MySQL

MYSQL数据类型优化

2016-02-15 21:40 579 查看
mysql支持的数据类型很多,选择正确的数据类型对于获得高性能至关重要,不管存储哪种数据类型,下面几个简单原则都有助于我们做出更好的选择。

1:更小的通常更好,更小的数据类型通常更快,因为它们占用更少的磁盘,内存和cpu缓存,并且处理时需要的CPU周期也更少。(但是要确保不会低估要存储值的范围)。

2:简单就好,简单的数据类型操作通常需要更少的cpu周期,例如整型比字符串的操作代价更低,因为字符集和排序规则比较整型更为复杂。

3:尽量避免null,如果查询中包含可为NULL 的列,对mysql来说更难优化,因为可为空的列使得索引,索引统计和值都比较复杂。可为NULL 的列会使用更多的存储空间,在mysql里也需要做特殊处理。当可为null的列被索引时,每个索引记录需要一个额外的字节,在myISAM里甚至还有可能导致固定大小的索引变成可变大小的索引。当然也有特殊情况,InnoDB使用单独的bit存储null值,有很好的空间效率,但不适用于myISAM。

整数类型:TINYINT ,SMALLINT,MEDIUMINT,INT,BIGINT

tinyint

从 0 到 255 的整型数据。存储大小为 1 字节

smallint

从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节

mediumint

从 -2^23 (-8388608) 到 2^23 - 1 (8388608) 的整型数据。存储大小为 3个字节

int

从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

bigint

从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。

整数类型后面跟的是显示的宽度。M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

字符串类型 :varchar char

varchar用于存储可变长度字符串,它比定长类型更节省空间。varchar需要使用1或者2两个额外字节记录字符串长度,如果列的最大长度小于等于255,则需要1个字节表示,如果大于255则需要2个字节表示。如varchar(10)则需要11个字节存储空间,varchar(300)则需要302个字节存储空间; varchar节省了存储空间,对性能也有帮助。但是由于行时边长的,在update时候可能使当前行长度变得比以前长,这就导致需做更多的额外工作。

如果一个行占用的空间增长在页内没有更多空间可以存储,myISAM会将页拆成不同的片段存储,InnoDB则需要分裂页来使行能放入页内。

字符串列的最大长度比平均长度大很多,并且很少更新那么很适合用varchar作存储。

在mysql5.0或者更高版本, 存储时会保留末尾空格,4.1或更老版本时会删除末尾空格。

InnoDB会把过长的varchar存储为BLOB。

CHAR类型是定长的,对于经常变更的值,char比varchar更好,因为定长的char类型不容易产生碎片。对于非常短的列 char在存储空间上也更有效率。

使用varchar(3)对比 varchar(300)来存储 ‘php’的优势?

更长的列会分配更多的内存,mysql通常会分配固定大小的内存块来保存内部值。尤其在内存临时表进行排序时会表现特别糟糕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: