Mysql入门系列:选择MYSQL列的类型
2006-12-31 10:47:37 来源:WEB开发网■ 列值有特定的取值范围吗?如果它们是整数,它们总是非负值吗?如果这样,可采用UNSIGNED 类型。如果它们是串,总能从定长值集中选出它们吗?如果这样, ENUM或SET 是很合适的类型。在类型的取值范围与所用的存储量之间存在折衷。需有一个多“大”的类型?对于数,如果其取值范围有限,可以选择较小的类型,对取值范围几乎无限的数,应该选择较大的类型。对于串,可以使它们短也可以使它们长,但如果希望存储的值只含不到10 个字符,就不应该选用CHAR( 2 5 5 )。
■ 性能与效率问题是什么?有些类型比另外一些类型的处理效率高。数值运算一般比串的运算快。短串比长串运行更快,而且磁盘消耗更小。定长类型比可变长类型的性能更好。
■ 希望对值进行什么样的比较?对于串,其比较可以是区分大小写的,也可以不区分大小写。其选择也会影响排序,因为它是基于比较的。
■ 计划对列进行索引吗?如果计划对列进行索引,那么将会影响您对列类型的选择,因为有的MySQL版本不允许对某些类型进行索引,例如不能对BLOB 和TEXT 类型进行索引。而且有的MySQL版本要求定义索引列为NOT NULL 的,这使您不能使用NULL 值。
现在让我们来更详细地考虑这些问题。这里要指出的是:在创建表时,希望作出尽可能好的列类型选择,但如果所作的选择其实际并不是最佳的,这也不会带来多大的问题。可用ALTER TABLE 将原来选择的类型转换为更好的类型。在发现数据所含的值比原设想的大时,可像将SMALLINT 更换成MEDIUMINT 那样简单地对类型进行更换。有时这种更换也可能很复杂,例如将CHAR 类型更换成具有特定值集的ENUM 类型。在MySQL3.23 及以后的版本中,可使用PROCEDURE ANALYSE( ) 来获得表列的信息,诸如最小值和最大值以及推荐的覆盖列中值的取值范围的最佳类型。这有助于确定使用更小的类型,从而改进涉及该表的查询的性能,并减少存储该表所需的空间量。
更多精彩
赞助商链接