您可能知道,向包含数百万条记录的MySQL表中添加一个新列是困难的,在某些情况下是不可能的。
在每个表(例如,元表)中添加一个文本列以避免将来的头痛是一个好主意吗?当然,在大多数情况下,它们是空的。
这些数据可以作为JSON存储。我知道这个字段不容易访问,但它可以避免另一个连接,这对于这个性能敏感的应用程序来说是很重要的。
它使用InnoDB。
发布于 2015-02-06 18:14:12
我同意“糟糕的形式”。
A计划:
下面是另一种方法,当您确实需要添加另一列时(S)。
使用相同的主键(“垂直分区”)创建一个新表。(但不是AUTO_INCREMENT。)把新的一栏(S)放进去。获取新数据的联接在您的代码中将是混乱的,但只有当您实际需要这些新列时才会如此。
另外,将其设置为左联接,以便在没有列数据的情况下,新表中的行可以丢失。(此建议适用于“稀疏”信息。)垂直分区和左联接通常是“集群”中稀疏属性的一个好主意。
B计划:
要详细说明JSON建议--有一个包含键值对的文本字段(现有的或新的),您实际上不需要MySQL来查看、在哪里或在什么地方进行排序。让应用程序看到它们。
更好的是,压缩应用程序中的JSON并将其存储在一个BLOB中--这将使其体积缩小3倍。
发布于 2015-02-04 22:21:39
我响应@JohnM的“坏表单”的评论-正确地设计东西,如果你有新的要求(或者你的设计第一次不是完美的--我不太可能知道:- ),那么选择添加新的字段。如果JSON适合您明确演示的需求,请使用JSON,否则使用“普通”字段类型。
我见过太多的系统,这些“备用字段”被用于任何和任何东西,它最终变成了一个无法维护的混乱的无文档的字母表汤。
“嘿,吉米,字段XYZ__001是做什么的?”
“我不知道,问比利”
“但是比利正在阿尔加维度假”
“哎呀!”
https://dba.stackexchange.com/questions/91108
复制相似问题