我有这样的查询:
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
有什么想法吗?
答案 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