请考虑以下示例。假设我们正在为在线书店构建数据库。我们有一个 Book 表包含 n 条记录,一个 Type 表包含 m 条记录。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 算法,因此时间成本将为:2log(n) + Cm。正确的?(以 Book 表和 BookType 表为索引)
但是,如果我们可以将 TypeId 存储为 JSON 数组并使用它进行连接,那么我们可以一次获取数据。时间将是 log(n) + Cm,这至少是两倍快。语法可能类似于:
select B.*, T.Name from Book B
inner join Type T on ParseJsonAsIntArray(BookType) = T.TypeId
我找不到像 ParseJsonAsIntArray() 这样的 MySQL 函数。他们为什么不这样做?如果我遗漏了明显的东西,请道歉。