问题陈述
我有一张users
由 2 种不同类型的用户A和B组成的大桌子。目前,它们共享一些字段,而其他字段是A-only或B-only。
现在,通常在此表上进行适当的规范化,我们最终可以拥有 1 个共享表和 2 个具有A-fields和B-fields的相关表。但是,我的目标是减少空间,但尽可能保持相同的性能。
我的解决方案
我的解决方案是使用 JSON 类型来存储在 2 种不同用户类型之间不共享的字段,但同时为需要索引的字段创建生成和索引的虚拟列。它应该节省空间,因为 MySQL 不会为未使用的字段分配空间,同时由于虚拟列 + 索引,它保持或多或少相同的性能。此外,这些字段不会用作外键,因此虚拟列对我来说不是限制。
问题
环顾四周,似乎人们不建议使用 JSON 类型来避免在未使用的字段上浪费空间。相反,仍然强烈建议使用带有单独表的普通字段。您是否认为我使用 JSON 而不是实际字段来接近错误的方式?如果是,为什么?