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

对MySQL数据类型的认识

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

对MySql数据类型的认识:

由于Mysql独有的特性和实现细节对性能的影响是很明显的,因为做好Mysql数据库的设计很关键。对于数据库设计,我们不得不提表字段的类型选择,由于Mysql支持的数据类型非常多,因此如何选择正确的数据类型对于获得高性能至关重要。不管要存储的数据是什么类型,我们都需要根据一些数据库设计原则来考虑。

选择数据类型的思考

更小的通常是更好的(一般情况下,应该尽可能使用正确存储数据的最小数据类型。)

为什么呢?

(1) 因为更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更短。
(2) 要确保没有低估需要存储的值的范围,更小是相对与数据类型的最大值范围来讲的。
(3) 如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型。

简单就好(简单数据类型的操作通常需要更短的CPU周期。)

为什么呢?下面有几个例子说明一下原因。

(1) 整型比字符串操作代价更低,因为字符串集和校对规则(排序规则)是的字符比较比整型比较更复杂。
(2) 存储日期和时间应该使用Mysql内建的类型(date,time,datatime)。
(3) IP地址的存储应该用整型(int)。

尽量避免 NULL (空值)

为什么呢?

(1) 很多表都包含可为NULL的列,就算程序并不需要保存NULL也是如此,这是因为列的默认属性就是可为NULL。通常情况下最好指定列NOT NULL,除非真的需要存储NULL。
(2) 如果查询中包含可为NULL的列,对于Mysql来说是很难优化的,因为NULL的列使得索引,索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在Mysql里也需要特殊处理。当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里甚至还可能导致固定大小的索引变成可变大小的索引。
(3) 通常把可为NULL的列改为NOTNULL带来性能提升比较小,如果计划在列上建索引的话,就应该尽量避免设计成可为NULL的列。(也有一个例外,那就是在InnoDB中,会使用单独的位(bit)来存储NULL值,所以对稀疏数据有很好的空间效率。)

总结

在为列选择数据类型时,第一步需要确定合适的大类型(数字、字符串、时间等等),这通常是很简单的,那么下一步就是选择具体的类型了。

很多Mysql的数据类型可以存储相同类型的数据,只是存储的长度和范围不一样、允许的精度不同,或者需要的物理空间(磁盘和内存空间)不同。相同大类型的不同子类型数据有时候也有一些特殊的行为和属性。比如:DATATIME 和 TIMESAMP列都可以存储相同类型的数据(时间和日期)并且精确到秒,然而TIMESTAMP只使用DATATIME一半的存储空间,并且会根据时区变化,具有特殊的自动更新能力。另外TIMESTAMP允许的时间范围要小得多,有时候它的特殊能力会成为障碍,这都是我们开发者需要考虑的。

整数类型

有两个类型的数字:整数(whole number)和实数(real number)。

如果存储整数,可以使用这几种整数类型:TINNYINT(8)、SMALLINT(16)、MEDIUMINT(24)、INT(32)、BIGINT(64)。

整数类型有可选的本文来源gaodai#ma#com搞*!代#%^码$网*的UNSIGNED属性,表示不允许为负值,这大致可以是正数的上限提高一倍。


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

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

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

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

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