在MySQL中,性能和存储(空间)明智地归零是什么?
例如:
TINYINT:1字节TINYINT w / NULL 1字节+以某种方式存储NULL?
比尔的回答很好,但是有点过时了。用于存储NULL使用一个或两个字节应用于仅 InnoDB的冗余行格式。由于MySQL 5.0.3 InnoDB使用COMPACT行格式,该格式仅使用一位存储NULL(当然,最小字节是一个字节),因此:
NULL所需的空间= CEILING(N / 8)个字节,其中N是一行中NULL列的数量。
0 NULLS = 0字节 1-8 NULLS = 1个字节 9-16 NULLS = 2个字节 17-24 NULLS = 3个字节 等等... 根据有关COMPACT vs REDUNDANT的MySQL官方网站:
紧凑的行格式将行存储空间减少了约20%,但代价是增加了某些操作的CPU使用率。如果您的工作量是典型的工作量,受缓存命中率和磁盘速度的限制,那么紧凑格式可能会更快。
与空字符串或零相比,使用NULL的优势: 1 NULL需要1个字节 1个空字符串需要1个字节(假设VARCHAR) 1个零需要4个字节(假设INT) 您开始在这里看到节省的地方:
8个NULL需要1个字节 8个空字符串需要8个字节 8个零需要32个字节 另一方面,我建议对空字符串或零使用NULL,因为它们更具组织性,可移植性并且需要较少的空间。为了提高性能并节省空间,请专注于使用适当的数据类型,索引和查询,而不要使用怪异的技巧。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。