• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL数据类型优化原则

mysql 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

MySQL支持的数据类型很多,选择正确的数据类型对于高性能至关重要。下面几个简单的原则都有助于做出更好的选择。

  • 更小的通常更好

应该尽量使用可以正确储存数据的最小数据类型。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少。如果无法确定哪个数据类型时最好的,就选择你认为不会超过范围的最小类型。

  • 简单就好

简单数据类型的操作通常需要更少的CPU周期。例如,整形比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形更复杂。比如用MySQ内建的类型而不是使用字符串来存储日期和时间、应该用整形存储IP地址。

  • 尽量避免null

如果查询中包含可为null的列,对MySQL来说更难优化,因为可为null的列使得索引、索引统计和值比较都较为复杂。可为null的列会使用更多的存储空间,在MySQL里也需要特殊处理。当可为null当列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引变成可变大小的索引。

通常把可为null的列改为not null带来的性能提升比较小,所以没有必要在现有的架构中查找并修改这种情况,除非确定这回导致问题。

例外的是在InnoDB使用独立的位存储null值,所以对于稀疏数据(很多值为null,只有少数行的列有非null值)有很好的空间效率,但这一点不适用于MyISAM。

在为列选择数据类型时。

第一步需要确定合适的大类型:数字、字符串、时间等
第二步是选择具体类型。MySQL的很多数据类型都可以存储相同类型的数据,只是存储的长度和范围不一来4源gaodaimacom搞#代%码*网样、允许的精度不一样,或者需要的物理空间不同。

整数类型

存储整数可以用这几种类型

类型存储位数
tinyint8
smallint16
mediumint24
int32
bigint64

它们可以存储的值的范围-2^(N-1)^到2^(N-1)^-1,其中N是存储空间的位数。
整数类型还有可选有符号属性,表示不允许负值,这可以使正数的上限提高一倍。如tinyint无符号可以存储的范围是0到255,但他允许负值但存储范围是-128到127。

MySQL选择不同的整数类型是决定怎么在内存和磁盘中保存数据的。但是在整数计算一般使用64位但bigint整数,即使32位环境也是一样。(除了聚合函数)

MySQL还可以为整数类型指定宽度。如int(11),但是它不会限制值的合法范围,只是规定了MySQL的一些交互工具(如SQLyog,navicat)用来显示字符的个数。对于存储和计算来说,int(1)和int(11)是相同的。

实数类型

实数是带有小数部分的类型。MySQL中可以用decimal、float和double来存储实数类型。

float和double类型支持使用标准的浮点运算进行近似计算。
decimal类型用于存储精确的小数,在MySQL5.0以及更高的版本中,MySQL服务器自身实现了decimal的高精度计算。

浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储,double使用8个字节存储,相比flaot有更高的精度和更大的范围。在浮点计算时,MySQL都使用的double作为内部浮点计算的类型。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL数据类型优化原则

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址