跨表连接时如何最好地索引/解构 json 对象?

Posted

技术标签:

【中文标题】跨表连接时如何最好地索引/解构 json 对象?【英文标题】:How to best index/deconstruction json objects when joining across tables? 【发布时间】:2021-08-31 21:01:42 【问题描述】:

所以我有点进退两难。我有两个表中的数据,看起来有点像这样:

表 1: 字段 A:

["ABC","123","doReMi"]

表 2: 字段 B:

["QWE","ASD","ZXC"]

数据只是一个 JSON 字符串数组,没有键/值对,然后解构并在其上放置索引。

我必须像这样进行一些讨厌的连接:

table1 
LEFT JOIN table2
  ON JSON_SEARCH(table1.fieldA,one,table2.fieldB) IS NOT NULL

对于解决这个问题的最佳方法,我有点坚持,因为搜索的性能相对糟糕。任何提示/提示将不胜感激!

谢谢

【问题讨论】:

没有内置的 JSON 函数来检查 JSON 数组是否重叠(而不是对象)。将一个数组解析为元素,然后逐个检查值。 【参考方案1】:

最好根据数据的使用方式来设计架构。

JSON 列可方便地保存杂项信息的集合您不需要通过 SQL 进行检查。如果需要频繁解析,最好在将数据放入表之前进行解析。

也就是说,将一个命名属性放入它自己的列中。并为该列提供合适的数据类型。或者,在您的情况下,将数组转换为表格的行。您的 table1 需要另一个 table1A ,在您的示例中,3 行,每个值一个,加上一个 id,以便它可以是 JOINedtable1 的任何其他内容。

table1A 可以很容易地在该列上有一个INDEX

【讨论】:

以上是关于跨表连接时如何最好地索引/解构 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

跨表的 SQL Server 唯一索引

如何使用对象解构在 TypeScript 中导入 JSON?

django如何跨表查询

如何在Javascript中解构一个json对象数组

ORM的多表查询详述

ES6 解构赋值