最近更新时间:2021-03-02 20:03:29
如图的数据建模,平台如何执行sql?
我们从后台截取sql如下:
SELECT * /*查询字段已经删除,主要看下面的join逻辑*/
FROM `dashboard`.`app_version` AS `t1`
INNER JOIN `dashboard`.`api_name` AS `t2` ON (`t1`.`id` <=> `t2`.`id`)
INNER JOIN `dashboard`.`backend_message` AS `t3` ON (`t1`.`id` <=> `t3`.`id`)
INNER JOIN `dashboard`.`backend_deploy_persons` AS `t4` ON (`t3`.`creator_id` <=> `t4`.`creator_id`)
INNER JOIN `dashboard`.`bigviz_user` AS `t5` ON (`t4`.`id` <=> `t5`.`id`)
WHERE (t5
.id
IN (8082))
从sql可以看出,平台是以节点对应关系来执行sql的。
拓展:
(1)如果在列表筛选器针对其中一个表的字段设置了筛选,sql 如何执行?
sql是先把模型中表与表的join关系理出来。然后基于整个结果做的筛选字段筛选。
这样的缺陷是:如上图,如果t1和t5在不做筛选的时候会出来多条结果,对性能不是特别好。
优化:可以把t5创建一个自定义sql, 内容如: select * from t5 where 条件=xxx 。 然后把这个sql视图代替上图的t5单表。
(2)这样的一个数据模型,在报告中,如果只用了某张表的一个字段,会如何?
平台会把数据模型的sql 当成一个子sql,在该sql上做查询
纯净模式