gpt4 book ai didi

mysql - MySQL 可以加入 XML 字段(或 JSON)吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:54 25 4
gpt4 key购买 nike

请考虑以下示例。假设我们正在为在线书店构建数据库。我们有一个包含 n 条记录的 Book 表和一个包含 m 条记录的 Type 表。 n 是一个非常大的数字。 m小。

--------
Book
---------
BookId
BookName
BookType
---------

-------
Type
--------
TypeId
TypeName
---------

连接这两个表的传统方法是创建一个名为 BookType 的第三个表

---------- 
BookType
----------
BookTypeId
BookId
TypeId
----------

如果我们想检索带有类型的图书记录,我们可以这样做:

select B.*, T.Name from Book B
inner join BookType BT on B.BookId = BT.BookId
inner join Type T on BT.TypeId = T.TypeId

由于 Book 表很大,所以 BookType 表就更大了。由于 DB 索引使用的是 B-Tree-like 算法,因此时间成本为:2log(n) + Cm。正确的? (有 Book 表和 BookType 表索引)

但是,如果我们可以将TypeId存储为一个JSON数组,并用它来进行join,那么我们就可以一趟搞定数据。时间将是 log(n) + Cm,这至少快两倍。语法可以是这样的:

select B.*, T.Name from Book B
inner join Type T on ParseJsonAsIntArray(BookType) = T.TypeId

我找不到像 ParseJsonAsIntArray() 这样的 MySQL 函数。他们为什么不这样做?如果我遗漏了显而易见的内容,请道歉。

最佳答案

不,MySQL 中没有用于解析 JSON 的内置函数。最接近的是 ExtractValue()用于 XML 数据。此函数使用 Xpath 表达式来挑选 XML 文档的元素。但无论如何,MySQL 不支持对半结构化 blob(如 XML 或 JSON)中的元素进行索引。这注定是一个低效的查询。

但首先要做的是。您正在尝试使用非规范化 来解决实际上是关系数据库优势的问题。 BookType 表会很长,但每一行都非常小。所以它不会像你想象的那么糟糕。

BookType 支持按 BookType 进行索引搜索是一个巨大的优势。当您进行非规范化时,您基本上使其中一个查找变得高效,但您牺牲了另一个查找。

另请参阅我对 Is storing a comma separated list in a database column really that bad? 的回答

关于mysql - MySQL 可以加入 XML 字段(或 JSON)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13793098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com