这里是我当前的查询:一些严重的SQL查询优化需要(MySQL的)
SELECT IFNULL(sum(open_for), 0) total, count(IF(open_for > 0, 1, null)) wins, count(IF(open_for < 0, 1, null)) losses FROM `sport_points` WHERE (sportable_id = 1 and sportable_type = 'Team' and game_time > '2010-07-13 11:39:58 UTC'
它基本上返回这些汇总数据:
队
- open_for
- 总:2000
- 获胜:20
- 损失:12
现在,假设表中有大约6个其他列,我需要执行单独的查询以获得一个团队的所有特定于列的聚合数据。例如:
SELECT IFNULL(sum(FINAL_FOR), 0) total, count(IF(open_for > 0, 1, null)) wins, count(IF(open_for < 0, 1, null)) losses FROM `sport_points` WHERE (sportable_id = 1 and sportable_type = 'Team' and game_time > '2010-07-13 11:39:58 UTC'
TEAM甲
- final_for
- 总数:4000
- 胜:40
- 损失:18
这种方法的问题在于我必须针对所有列运行大约6次单独的查询200支队伍。这是一个严重的负载问题。
理想情况下,查询将返回一个团队的所有特定于列的聚合数据 - 在一个查询中。它看起来像这样的结果:
队
- open_for_total
- open_for_wins
- open_for_losses
- final_for_total
- final_for_wins
- final_for_losses
...等...
6个单独的查询我可以理解,但似乎这些查询可以按团队ID进行分组,因此您可以在6个不同的查询中获得所有200个团队的结果。 6个查询不应该对200个团队造成负载问题。你是否正确编制了表格索引? – methodin 2010-10-11 11:59:54
该方法可能工作...但是,我并不总是想要所有200个团队一次...不管,它可能是一个选项...什么是SQL的样子? – keruilin 2010-10-11 12:09:06