1、MD5在MySQL数据库中的存储
用CHAR(32)来存储MD5值是一个常见的技巧。如果你的应用程序使用VARCHAR(32),则对每个值得字符串长度都需要花费额外的不 必要的开销。这个十六进制的值可以使用UNHEX()和HEX()函数来存储在BINARY(16)在BINARY(16)数据类型的中且更为高效。用这 种转换可以让每行占用的存储空间从32字节减少到16字节。
下面的示例展示了原始MD5以及压缩后的MD5占用的空间对比:
这个原则也适用其他16进制的值,例如为所有列的散列值而定义的索引时。
2、IP地址在MySQL中的存储
一个IP地址应该定义为INT UNSIGNED数据类型,只占用4字节。
通常情况下将列定义为VARCHAR(15),这样平均要占用12字节。这样平均要占用12个字节。
这样一个改进就可以节约2/3的列数据占用的空间。INET_ATON()和INET_NTOA()函数可以管理IP在字符串和数字值之间的转换。
请看下面的示例:
这个技术是适合于ipv4。随着ipv6的广泛使用,一定要将这些128bit的整数值以binary(16)的类型存储,而不是用varchar数据类型那种人们可以阅读的方式。
来源文献:《EffectIve MySQL 之SQL语句最优化》李雪峰译。
时间: 2024-11-05 21:16:34