mysql标识符_MySQL 数据类型优化 (五:选择标识符 identifier 以及特殊类型)

一、选择标识符 (identifier)

为标识列 (identifier column)选择合适的数据类型非常重要。一般来说更有可能用标识列与其他列进行比较,或者通过标识列寻址其他列。标识列也有可能在另外的表中作为外键,所以在外标识列选择数据类型时,应该选择跟关联表中的对应列一样的类型。

当选择标识列的类型时,不仅仅要考虑存储类型,还要考虑 MySQL 对这种类型怎么执行计算和比较。例如,MySQL 在内部使用 SUM 和 SET 类型,然后比较操作时转换为字符串。

一旦选定了一种类型,要确保在所以关联表中都要使用同样的类型。类型之间需要精确匹配,包括像 UNSIGNED 这样的属性。混用不同数据类型可能导致性能问题,即使没用影响,在比较操作时可能因为隐式类型转换导致很难发现的错误。

在可以满足值的范围需求,并且预留未来增长空间的前提下,应该选择最小的数据类型。下面是一些小技巧:

整数类型

整数通常是标识列最好的选择,因为它们很快并且可以使用 AUTO_INCREMENT。

EMUM 和 SET 类型

对于标识列来说,EMUM和 SET 类型通常是一个糟糕的选择,更适合存储固定信息,比如有序的状态,人的性别等。

字符串类型

应该尽量避免使用字符串类型作为标识列,因为他们非常消耗空间,并且通常比数字类型慢。尤其是在 MyISAM 表里使用字符串作为标识符时要特别小心,MyISAM 表默认对字符串使用压缩索引,这会导致查询慢得多。

二、特殊类型数据

某些类型的数据并不直接与内置类型一致。低于秒级精度的时间戳就是一个例子。

另一个例子是一个 IPv4 地址。经常使用 VARCHAR(15) 来存储 IP 地址。然而,它们实际上是 32 位无符号整数,不是字符串。用小数点将地址分成四段的表示方法只是为了让人们容易阅读。所以应该使用无符号整数存储 IP 地址。MySQL 提供了 INET_ATON() 和 INET_NTOA() 函数在这两种方法之间转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值