APIJSON icon indicating copy to clipboard operation
APIJSON copied to clipboard

您好作者大大,请教您一个关联查询的效率问题!

Open vxx321 opened this issue 3 years ago • 3 comments

谢谢作者大大提供出这么优秀的开源产品,

有一个设计思路上的问题存在疑惑,想请教您一下:

我在官网的文档里面看到,两表关联查询的例子,比如:

{ "[]": { "Moment": { "@column": "id,date,userId" }, "User": { "id@": "/Moment/userId", "@column": "id,name" } } }

我在本地调试时,看到系统控制台中看到的执行逻辑打印:

1、首先去Moment表中查询出所有的关联条件(userId)集合: SELECT id,date,userId FROM apiJson.Moment LIMIT 10(LIMIT暂用默认的10)

2、然后再在被关联的User表,将上一步查到的userId集合,作为条件依次循环查询: SELECT id,name FROM apiJson.apijson_user WHERE ( (id = 38710) ) LIMIT 1

所以我从现象上来看是,【第一步的集合中查询到N条数据,第二步便会循环执行N次SQL,即会获取N次数据库连接

如果后续我想放开LIMIT字段,一次性查询出两表关联的所有数据,或者是将LIMIT设置为一个特别大的值,这种设计会产生高频的数据库连接获取、释放,可能会影响数据执行效率,

与其在第二步,一条一条的遍历第一步的结果,为何第二步不用类似(“IN”)的方式,一次数据库连接去完成呀?

可能由于一些背景不太了解,所以想请教一下作者大大您是基于什么考虑,去这样设计的?

vxx321 avatar Aug 02 '22 14:08 vxx321

这个兼容性最好,性能优化可以看看通用文档的各种 JOIN,其中 APP JOIN 就是 IN 的方式 https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2 image

TommyLemon avatar Aug 03 '22 09:08 TommyLemon

请问兼容性是指与其他数据源,或面向其他数据组件产生的关联查询嘛?可不可以稍微展开一下呀?谢谢您~

vxx321 avatar Aug 03 '22 13:08 vxx321

请问兼容性是指与其他数据源,或面向其他数据组件产生的关联查询嘛?可不可以稍微展开一下呀?谢谢您~

多表关联查询、多层嵌套、多数据库、多数据源 等一些因素可能导致没法用 JOIN,尤其是 SQL JOIN

TommyLemon avatar Aug 04 '22 08:08 TommyLemon