稀疏列的MySQL数据库设计

标签 mysql database database-design

我有一个表(数百万行),其中一列是文本字段(存储 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/

相关文章:

sql-server - VB6 ADODB.Recordset RecordCount 属性总是返回 -1

database - 如何清除 Laravel 8 中数据库设置的缓存?

database - 主键列的命名约定是什么?

database - 为字典设计数据库

mysql - 如何根据其他列的结果运行 SELECT 语句?

javascript - 通过 Highcharts 从 MySQL 获取 JSON 编码数据时遇到问题

java - 错误 "; expected",sql 语句

PHP函数问题

php - 数据库设计,类别,子类别和主题中的项目

python - 以哈希形式将密码存储在 MySQL 数据库中 Django App