首页 > 解决方案 > MYSQL:带有索引虚拟列的 JSON VS 普通列和规范化

问题描述

问题陈述

我有一张users由 2 种不同类型的用户AB组成的大桌子。目前,它们共享一些字段,而其他字段是A-onlyB-only

现在,通常在此表上进行适当的规范化,我们最终可以拥有 1 个共享表和 2 个具有A-fieldsB-fields的相关表。但是,我的目标是减少空间,但尽可能保持相同的性能。

我的解决方案

我的解决方案是使用 JSON 类型来存储在 2 种不同用户类型之间不共享的字段,但同时为需要索引的字段创建生成和索引的虚拟列。它应该节省空间,因为 MySQL 不会为未使用的字段分配空间,同时由于虚拟列 + 索引,它保持或多或少相同的性能。此外,这些字段不会用作外键,因此虚拟列对我来说不是限制。

问题

环顾四周,似乎人们不建议使用 JSON 类型来避免在未使用的字段上浪费空间。相反,仍然强烈建议使用带有单独表的普通字段。您是否认为我使用 JSON 而不是实际字段来接近错误的方式?如果是,为什么?

标签: mysqljsonindexingdatabase-normalizationvirtual-column

解决方案


推荐阅读