1
我有這樣的查詢:的MySQL試圖重新使用子查詢的結果,以高效的方式
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)
在其內部使用與上面的子查詢完全相同的子查詢,但隨後還會選擇當前正在分組的值的一小部分。
我的問題似乎是這樣的。性能太慢,因爲我似乎無法將WHERE id = t.q
放在(SELECT q,w, FROM Table A WHERE conds)
子查詢中。我只能猜測,對於每個唯一值q
,查詢正在運行,它會產生數百行,然後必須在未索引的臨時表上執行WHERE
子句。我想我需要在完全加入之前執行WHERE
有什麼想法嗎?
上http://sqlfiddle.com/測試用例將是非常有益 – Laurence
您的查詢是無效的,在'SELECT'列表子查詢應該只返回一個列,你在做'(選擇I ,j ...)' – rsanchez
非常正確。做了一個編輯。 – user1063998