我目前有一个查询,它从两个表中选择指标数据,同时让项目从另外两个表中查询(一个是拥有的项目,另一个是用户有权访问的项目)。
SELECT v.`projectID`,
(SELECT COUNT(m.`session`)
FROM `metricData` m
WHERE m.`projectID` = v.`projectID`) AS `sessions`,
(SELECT COUNT(pb.`interact`)
FROM `interactionData` pb WHERE pb.`projectID` = v.`projectID` GROUP BY pb.`projectID`) AS `interactions`
FROM `medias` v
LEFT JOIN `projectsExt` pa ON v.`projectsExtID` = pa.`projectsExtID`
WHERE (pa.`user` = '1' OR v.`ownerUser` = '1')
GROUP BY v.`projectID`
时间太长了,1-2秒。这显然是多左连接场景。但是,我有一些想法可以提高速度,并且想知道这些想法原则上是什么。我是否:-
- 尝试在查询中选择列表,然后获取数据,而不是进行连接。不知道这将如何工作。
- 在单独的查询中进行选择以获取 projectID,然后在每个 projectID 上运行查询。这可能会导致成百上千的请求,但可能更适合处理?
- 其他想法?