为什么下面的代码非常慢?

时间:2011-06-02 17:12:32

标签: mysql sql

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 个答案:

答案 0 :(得分:3)

您在gamesstats和stats之间没有加入条件。所以你要创建一个Cartesian product,其大小可能是数十亿行。

答案 1 :(得分:2)

通过在where子句中使用没有连接的FROM gamesstats as gs, stats as s,您可以有效地在两个表之间创建交叉连接。添加连接条件。