【发布时间】:2016-02-13 03:40:24
【问题描述】:
在 MySQL 5.7 中,一种用于存储 JSON data in MySQL 表的新数据类型已被 添加。这显然将是 MySQL 的一个巨大变化。他们列出了一些好处
文档验证 - 只有有效的 JSON 文档才能存储在 JSON 列,因此您可以自动验证数据。
高效访问 - 更重要的是,当您将 JSON 文档存储在 JSON 列中时,它不会存储为纯文本值。相反,它被存储 采用优化的二进制格式,可以更快地访问对象 成员和数组元素。
性能 - 改进您的查询 通过为 JSON 列中的值创建索引来提高性能。 这可以通过虚拟列上的“功能索引”来实现。
方便 - JSON 列的附加内联语法使其 将文档查询集成到 SQL 中是非常自然的。为了 示例(features.feature 是一个 JSON 列):
SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254;
哇!它们包括一些很棒的功能。现在更容易操作数据。现在可以在列中存储更复杂的数据。 所以 MySQL 现在加入了 NoSQL。
现在我可以想象对 JSON 数据的查询类似于
SELECT * FROM t1
WHERE JSON_EXTRACT(data,"$.series") IN
(
SELECT JSON_EXTRACT(data,"$.inverted")
FROM t1 | {"series": 3, "inverted": 8}
WHERE JSON_EXTRACT(data,"$.inverted")<4 );
那么我可以在几个 json 列中存储巨大的小关系吗?好吗?它是否破坏了规范化。 如果这是可能的,那么我猜它会像 MySQL 列中的 NoSQL 一样发挥作用。我真的很想了解更多有关此功能的信息。 MySQL JSON 数据类型的优缺点。
【问题讨论】:
-
哦,请不要说我认为你在说什么。 Here, read this。你的想法是一个坏主意的另一个变种。
-
@Drew 你给了一个很大的答案。但这不是我的问题。我只想知道,如果我们为 json 数据编写查询,那么我们可能会跳过 sql 规则。因为我们不需要很多桌子
-
你说
Now it is possible to store more complex data in column。小心 -
Json 数据类型支持索引并且它有智能大小:64K & 4G。那么,如果我想存储 2000 个数据并添加 5 个嵌套标签而不是 5 个具有关系的表,那会有什么问题呢?
-
“我真的很想知道更多关于这个功能的信息。”和“MySQL JSON 数据类型的优缺点”。不是问题,如果改写为问题太宽泛。 “所以我从没想过 MySQL 中有复杂的模式结构和外键。我只使用几张表来存储复杂的关系。”是自相矛盾的,因为 JSON 不是关系和 FK。 “这样好吗”的解释只是对关系模型的介绍,所以这又太宽泛了。研究一些例子,列出你自己的利弊清单,并询问你哪里出错了。
标签: mysql json database database-normalization