mysql - 向大表添加列 : datatype or INT or reference table?

标签 mysql database reference binary set

我有一个包含 300.000 多条记录的表。

我想对一小部分记录(0.5% 或更少)添加一些“标记”;

什么是最好的选择:

  • 使用 INT 字段并将其视为二进制字符串

    marker 0: xxxxx1会被存储为1,

    标记 0 和 3:xx1001 将存储为 9,ecc..

  • 使用 SET 数据类型

  • 使用引用表并加入它们;像

    我的数据:id | ..

    标记:id |标记

    我的数据_标记:我的数据_id | markers_id

  • 添加其他字段(我不喜欢用零填充表格的想法)

我发现第一个选项“可爱”且易于实现,但以后更改可能会有问题。

我不知道如何评论第二个选项,因为我从未使用过该数据类型。

我猜我会选择第三种选择......

有什么建议吗?

最佳答案

鉴于您说只有 0.5% 的记录会有任何标记,您最好将标记拆分到它们自己的子表中。一旦你有了那个子表,你就不会浪费几乎那么多的空间并且可以使用一个 int,一个文字 mysql bit field ,每个标志字段等...

例如假设只有 8 个标志,您需要一个 1 个字节的 tinyint 字段。那会浪费大约 290kbytes 的存储空间。将其分离到自己的子表中,新表会有一点点开销,然后大约 10k 的存储空间用于各个标志记录。

关于mysql - 向大表添加列 : datatype or INT or reference table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778530/

相关文章:

php - 如何使用 json_encode 从数据库中获取数据

php - SQL表中所有价格的总和

sql - 我应该使用外键来显示 SQL 中的树关系吗

mysql - phpmyadmin 版本 4 : Relation view sometimes does not show foreign key constraints

Mysql带索引的查询需要很长时间

c# - Copy local = false file not found 异常问题

c++ - 临时对象和引用有什么关系?

c++ - 将类查看到容器中

mySQL 'NOT IN' 到 vfp 等效值

MySQL在批量插入后显示不正确的自动增量值