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

选择优化的数据类型

2014-05-13 17:01 405 查看
mysql支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储那种数据类型,下面几个简单的原则都有助于做出更好的选择。

更小的通常更好
 

一般情况下,应该尽量使用可以正确存储数据的最小数据类型(例如只需要存储0~200, tinyint unsigned更好)。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和cpu缓存,并且处理时需要的cpu周期也更少。

简单就好

简单数据类型的操作通常需要更少的cpu周期。例如,整形比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形比较更复杂。

尽量避免NULL

很多表都包含可为NULL(空值)的列,即使应用程序并不需要保存NULL也是如此,这是因为可为NULL是列的默认属性。通常情况下最好指定列为NOT NULL,除非真的需要存储NULL值。

如果查询中包含可为NULL的列,对Mysql来说更难优化,因为可为NULL的列使得索引、索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,再Mysql里也需要特殊处理。当可为NULL的列被索引时,每个索引记录都需要一个额外的字节。所以如果计划在列上建索引,就应该尽量避免设计成可为NULL的列。

在为列选择数据类型时,第一步需要确定合适的大类型:数字、字符串、时间等。下一步是选择具体类型。很多Mysql的数据类型可以存储相同类型的数据,只是存储的长度和范围不一样、允许的精度不同,或者需要的物理空间(磁盘和内存空间)不同。相同大类型的不同子类型数据有时也有一些特殊的行为和属性。

例如,DATETIME和TIMESTAMP列都可存储相同类型的数据:时间和日期,精确到秒,然而TIMESTAMP只使用DATETIME一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力。另一方面,TIMESTAMP允许的时间范围要小得多,有时候它的特殊能力会成为障碍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mysql