开发者社区> 问答> 正文

MySQL中的NULL(性能和存储)

在MySQL中,性能和存储(空间)明智地归零是什么?

例如:

TINYINT:1字节TINYINT w / NULL 1字节+以某种方式存储NULL?

展开
收起
保持可爱mmm 2020-05-10 19:50:07 470 0
1 条回答
写回答
取消 提交回答
  • 比尔的回答很好,但是有点过时了。用于存储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

    2020-05-10 19:50:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像