Mysql 假设是真的,那么metricData和interactionData中的匹配集将形成笛卡尔积,因为它们只与主媒体集相关,而彼此不相关。这通常非常昂贵,在这种情况下提取请求的计数也不是件小事。如果您先左键连接(如metricData),然后分组并计算其计数(
Mysql 假设是真的,那么metricData和interactionData中的匹配集将形成笛卡尔积,因为它们只与主媒体集相关,而彼此不相关。这通常非常昂贵,在这种情况下提取请求的计数也不是件小事。如果您先左键连接(如metricData),然后分组并计算其计数(,mysql,performance,select,join,Mysql,Performance,Select,Join,假设是真的,那么metricData和interactionData中的匹配集将形成笛卡尔积,因为它们只与主媒体集相关,而彼此不相关。这通常非常昂贵,在这种情况下提取请求的计数也不是件小事。如果您先左键连接(如metricData),然后分组并计算其计数(每个项目),然后左键连接到interactionData,然后分组,以计算interactionData,并对内部嵌套级别的metricData计数求和。但是重写这一点非常痛苦,因为它依赖于FROM子句中的Multiple SELECT,所以效
假设是真的,那么metricData和interactionData中的匹配集将形成笛卡尔积,因为它们只与主媒体集相关,而彼此不相关。这通常非常昂贵,在这种情况下提取请求的计数也不是件小事。如果您先左键连接(如metricData),然后分组并计算其计数(每个项目),然后左键连接到interactionData,然后分组,以计算interactionData,并对内部嵌套级别的metricData计数求和。但是重写这一点非常痛苦,因为它依赖于FROM子句中的Multiple SELECT,所以效率也不高。当其他路径探索失败时值得一试。你的意思是,在选择列表中也将子选择作为左连接写入吗?这种方法的问题通常是metricData和interactionData对于给定的projectId都可能有超过1行。(否则OP为什么会对这些表格进行计数)。如果该假设成立,那么metricData和interactionData中的匹配集将形成笛卡尔积,因为它们只与主媒体集相关,而彼此不相关。这通常非常昂贵,在这种情况下提取请求的计数也不是件小事。如果您先左键连接(如metricData),然后分组并计算其计数(每个项目),然后左键连接到interactionData,然后分组,以计算interactionData,并对内部嵌套级别的metricData计数求和。但是重写这一点非常痛苦,因为它依赖于FROM子句中的Multiple SELECT,所以效率也不高。当其他途径探索失败时,值得一试。
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`
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 (
SELECT v.projectID
FROM medias
WHERE ownerUser = '1'
GROUP BY projectID
UNION ALL
SELECT v.projectID
FROM medias v
INNER JOIN projectsExt pa
ON v.projectsExtID = pa.projectsExtID
WHERE v.ownerUser != '1'
AND pa.user = '1'
GROUP BY v.`projectID
) v