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

时间:2013-09-22 18:53:58

标签: 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

子查询(SELECT q,w FROM tableA WHERE conds)返回数百行。在GROUP BY 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 Table A WHERE conds)子查询中。我只能猜测,对于q的每个唯一值,正在运行查询,它会生成数百行,然后必须在未编制索引的临时表上执行WHERE子句。我想我需要在完全加入之前执行WHERE

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

此查询可能会产生相同的结果,但问题中缺少这么多信息,谁可以肯定?

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