您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > 数据库技术 > MySQL

MySQL学习笔记之数据类型优化

作者:项象多  来源:转载  日期:2016-02-16 21:38:52
收藏  评论:( 0 )  阅读:358

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通常会分配固定大小的内存块来保存内部值。尤其在内存临时表进行排序时会表现特别糟糕。


原文地址:MYSQL数据类型优化





MySQL
 
优化
 
除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/mysql/1155.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论