您好作者大大,请教您一个关联查询的效率问题!
谢谢作者大大提供出这么优秀的开源产品,
有一个设计思路上的问题存在疑惑,想请教您一下:
我在官网的文档里面看到,两表关联查询的例子,比如:
{ "[]": { "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”)的方式,一次数据库连接去完成呀?
可能由于一些背景不太了解,所以想请教一下作者大大您是基于什么考虑,去这样设计的?
这个兼容性最好,性能优化可以看看通用文档的各种 JOIN,其中 APP JOIN 就是 IN 的方式
https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2

请问兼容性是指与其他数据源,或面向其他数据组件产生的关联查询嘛?可不可以稍微展开一下呀?谢谢您~
请问兼容性是指与其他数据源,或面向其他数据组件产生的关联查询嘛?可不可以稍微展开一下呀?谢谢您~
多表关联查询、多层嵌套、多数据库、多数据源 等一些因素可能导致没法用 JOIN,尤其是 SQL JOIN