MySQL试图以有效的方式重用子查询的结果

MySQL试图以有效的方式重用子查询的结果,mysql,sql,Mysql,Sql,我有这样一个问题: SELECT q,COUNT(x),y, (SELECT i FROM (SELECT q,w FROM tableA WHERE conds) JOIN tableC ON (cond) WHERE id = t.q) FROM (SELECT q,w FROM tableA WHERE conds) t JOIN tableB GROUP BY q 子查询从tableA中选择q,w,其中conds返回几百行。按q分组后,大约剩下20行 子查询

我有这样一个问题:

SELECT q,COUNT(x),y,
    (SELECT i FROM (SELECT q,w FROM tableA WHERE conds)
     JOIN tableC ON (cond)
     WHERE id = t.q)
FROM (SELECT q,w FROM tableA WHERE conds) t
JOIN tableB
GROUP BY q
子查询从tableA中选择q,w,其中conds返回几百行。按q分组后,大约剩下20行

子查询SELECT i FROM SELECT q,w FROM tableA WHERE conds join tableC WHERE id=t.q在其内部使用了与上述子查询完全相同的子查询,但随后还选择了一部分结果,该结果基于当前正在分组的q值

我的问题似乎是这个。性能太慢,因为我似乎无法将WHERE id=t.q放入SELECT q,w,FROM表A的WHERE conds子查询中。我只能猜测,对于q的每个唯一值,正在运行的查询会产生数百行,然后必须在未索引的临时表上执行WHERE子句。我想我需要在完全连接之前执行WHERE


有什么想法吗?

这个查询可能会产生相同的结果,但问题中缺少这么多信息,谁能确定呢

Select 
    q,
    count(x),
    y,
    i
From 
    tableA a
       inner join
    tableC c
       on cond and c.id = a.q
       cross join -- is this an inner join?
    tableB b
Where
    conds
Group By
    q, 
    y, 
    i

在上的测试用例将非常有用您的查询无效,选择列表中的子查询应该只返回一列,并且您正在执行SELECT i,j…非常正确。进行了编辑。