我有一个表(数百万行),其中一列是文本字段(存储 json blob)。但其中只有大约 10-20% 实际上是非 Null 的。 对于稀疏列,最佳实践是什么? 我应该吗
a) 保持表格不变或者
b) 仅使用该文本列创建一个新表?
如果我没记错的话,选项(a)很好,因为 InnoDB 只会动态分配 Text 列所需的空间,对吗?有理由选择选项(b)吗?看起来选项(b)只会增加查询(连接)这些表的复杂性,并进一步增加空间复杂性。
最佳答案
MySQL(InnoDB 存储引擎)对于 NULL 不存储任何内容。嗯,每一行都有一个位字段,每个可为空的列有 1 位。位字段后跟非 NULL 列的数据值。可变长度列(如 VARCHAR、TEXT、BLOB 或 JSON)仅占用给定长度所需的空间。
因此,我建议保持表不变,保留表中的 TEXT 字段,并在没有 JSON 数据时将其设置为 NULL。
P.S.:你不是用JSON data type吗? ?
关于稀疏列的MySQL数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52338775/