2011-06-02 47 views
0
SELECT gs.HomeTeamId, 
100*avg(s.P2M)/avg(s.P2A) as P2P FROM gamesstats as gs, stats as s 
WHERE gs.LeagueId = '145' AND 
gs.SeasonStart = '2010' 
GROUP BY gs.HomeTeamId 
HAVING P2P > 52.12765958 

這是我嘗試在我的mysql服務器上要求的SQL。出於某種原因,它需要太多時間。我可以在一秒鐘內分別獲得s.P2Ms.P2A,但這需要永久。 任何人都明白爲什麼?爲什麼下面的代碼非常慢?

回答

2

通過使用FROM gamesstats as gs, stats as s沒有在where子句中加入,您可以有效地創建2個表之間的交叉連接。添加連接條件。

+0

你可以做一個WHERE而不是加入,我發現我沒有一分鐘前。不管怎麼說,還是要謝謝你。 – Vadiklk 2011-06-02 17:18:53

3

您沒有加入gamestats和統計之間的條件。所以你要創建一個可能有數十億行大小的Cartesian product

+0

你可以做一個WHERE而不是加入,我發現我沒有一分鐘前。不管怎麼說,還是要謝謝你。 – Vadiklk 2011-06-02 17:18:43

+0

這在邏輯上與連接相同。 – 2011-06-02 20:52:22