【发布时间】:2011-07-31 07:22:13
【问题描述】:
我有一个播放器软件。它有一个支持它的 SQLite 数据库。
我是 SQL 新手,我猜怎么可能是进行“热门游戏”排名的最佳方式。热门游戏可能来自所有时间、上周、上个月等。
我认为记录所有播放的音乐以及日期和小时,然后在范围内选择日期,但它看起来很重。
有更好的方法吗?
【问题讨论】:
标签: sql sqlite database-design
我有一个播放器软件。它有一个支持它的 SQLite 数据库。
我是 SQL 新手,我猜怎么可能是进行“热门游戏”排名的最佳方式。热门游戏可能来自所有时间、上周、上个月等。
我认为记录所有播放的音乐以及日期和小时,然后在范围内选择日期,但它看起来很重。
有更好的方法吗?
【问题讨论】:
标签: sql sqlite database-design
你的方法是最简单的,所以我会尝试用一个大日志来测试它,看看它是如何执行的。如果它做得好,那么没有必要把事情复杂化。
如果性能不够好,那么这是一个更复杂的方法:
如果上个月是您将显示的最长时间范围(所有时间除外),那么您可以有一个仅包含上个月播放的日志表。每次播放歌曲时,将其添加到日志中,然后定期删除超过一个月的记录(每次插入记录时,或每天一次)。这样,您的查询将处理更少的记录。上周排名仍然需要选择一个日期范围,但应该会更快。
如果这仍然不够好,您可以为每个时间范围(TopLastMonth、TopLastWeek、TopToday 等)创建一个日志表,而不仅仅是一个跨越最长时间范围的日志表。这样,排名查询将永远不必使用 WHERE 子句,因为它们将始终汇总表中的所有记录。只有 DELETE 查询必须在日期上进行选择,并且这些查询可以不那么频繁地运行。
对于所有时间排名,您需要一个表格,其中包含每首歌曲的记录。每次播放歌曲时,增加播放次数字段。您的 All Time 排名将查看此表而不是日志。
【讨论】: