高效的mysql查询多个表

时间:2010-10-25 16:55:50

标签: mysql

我有一个拥有2000个游戏的数据库。每个游戏包含来自1-90的15个数字。

每次我在数据库中提交一个号码,我都希望我的结果更新,所以我总是看到最接近完成的游戏。 (一次只能观看50场比赛)。

我的数据库结构如下所示:

表:游戏

  • ID
  • 名称

表:game_numbers

  • game_id

表:numbers_played

实施例: 表游戏包含游戏。每个游戏的15个数字(范围1-90)存储在 game_numbers 中,其中 game_id 标识游戏。表 numbers_played 包含已播放的1-90的随机数。

如何使用播放次数最多的50个游戏(表示game_numbers和numbers_played中存在的结果),记住效率和简单性?

2 个答案:

答案 0 :(得分:1)

未经测试...

  SELECT game_id, COUNT(*)
    FROM game_numbers
   WHERE number IN (SELECT number FROM numbers_played)
GROUP BY game_id
ORDER BY COUNT(*) DESC
   LIMIT 50;

答案 1 :(得分:0)

创建一个“播放的数字”列(即非规范化字段,即可从“numbers_played”表中收集的信息的副本。

然后在该列上创建一个索引,如果你“按顺序”,MySQL可以使用索引来避免需要排序。

但是,请先查看是否存在性能问题。如果你不这样做,那么你将节省你自己的努力,如果你只是保持原样,系统将更加规范化,对多个表进行查询并按聚合“排序”。