2011-10-10 58 views
1

我需要改善大型MySQL視圖的性能。其中大部分非常簡單,不會造成太多的性能問題,但是有很長一段時間充滿了數十個子查詢,這些子查詢以相同的問題遞增一個值。我認爲必須有更好的方法來做到這一點,但我不是SQL大師。任何幫助是極大的讚賞!如何減少對這些MySQL子查詢的需求?

(我概括一下代碼,使問題更加清晰)

SELECT 
p.something, 
p.otherthing, 
c.athing, 
d.nothing, 
(select startdate from dbo.aqcprojects where projectid = p.id and aqcphase = 1) as 'Phase 1 start', 
(select finishdate from dbo.aqcprojects where projectid = p.id and aqcphase = 1) as 'Phase 1 end', 
(select startdate from dbo.aqcprojects where projectid = p.id and aqcphase = 2) as 'Phase 2 start', 
(select finishdate from dbo.aqcprojects where projectid = p.id and aqcphase = 2) as 'Phase 2 end', 
**the above four lines repeated ad nauseum. 
FROM 
bunch of joins 
+0

可以顯示錶結構將它添加到一堆? –

回答

3

您可以加入的

SELECT 
p.something, 
p.otherthing, 
c.athing, 
d.nothing, 
project_phase_1.startdate as 'Phase 1 start', 
project_phase_1.finishdate as 'Phase 1 end', 
project_phase_2.startdate as 'Phase 2 start', 
project_phase_2.finishdate as 'Phase 2 end', 
**the above four lines repeated ad nauseum. 
FROM 
projects AS p 
LEFT JOIN dbo.aqcprojects AS project_phase_1 ON project_phase_1.projectid = p.id 
LEFT JOIN dbo.aqcprojects AS project_phase_2 ON project_phase_2.projectid = p.id 
bunch of joins 
WHERE project_phase_1.aqcphase = 1 AND project_phase_2.aqcphase = 2 
+0

看起來不錯,我會試一試 - 謝謝! –

+0

不客氣 – frail