高性能Mysql(第3版)_数据类型的选择_整数类型

Mysql中整数类型Mysql中整数类型

tinyint,smallint,mediumint,int,bigint(对应尺码:xs,x,m,l,xl对号入座),其中各占8,16,24,32,64位存储空间,存储范围是:-2(N-1)~ 2(N-1)-1,tinyint的范围是-127~128。

unsigned属性

unsigned属性:该属性是整数类型的可选的属性,表示不允许负值。可以使正数的上限提高一倍,tinyint unsigned 的存储范围是0~255.

Mysql可以为整型指定宽度,如int(11),但是这不会限制值的合法范围,只是规定了Mysql的一些交互工具(例如mysql命令行客户端)用来显示的字符的个数,对于存储和计算来说,int(1)和int(20)是相同的。

标识列的数据类型

在可以满足值的范围的需求下,并且预留未来增长空间的前提下,应该选择最小的数据类型,例如有一个state_id来存储美国各州的名字,就不需要用几千或者几百万个值,所以不需要使用int,tinyint足够存储,而且比int少3个字节,如果用和这个值作为其他表的外键,3个字节可能导致很大的性能差异
整数类型通常是标识列的最好的选择,因为它们很快并且可以使用AUTO_INCREMENT.

整型的外键关联

一旦选定了一种类型,,要确保在所有关联表中都使用同样的类型。类型之间需要精确匹配,包括像unsigned这样的属性。混用不同的数据类型可能会导致性能问题,即使没有性能影响,在比较操作时隐式类型转换也可能导致很难发现的错误,这种错误可能很久以后才突然出现,那时候可能都已经忘记是在比较不同的数据类型。

如果使用的是innodb存储引擎,将不能在数据类型不是完全匹配的情况下创建外键,否则会有报错信息“Error 1005 :cant create table”,这个问题在mysql邮件中经常有人抱怨(奇怪的是,在不同长度的varchar列上创建外键又是可以的)

阅读自156,168页。

本作品采用《CC 协议》,转载必须注明作者和本文链接
love ,live in the moment. 如果这篇文章对您有所帮助的话,请点一个赞,谢谢~
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!