MySQL 计数/总和性能


MySQL Count / Sum Performance

我正在开发一个大型应用程序,该应用程序将包含几个具有大型数据集的表。(可能是 1M+ 行)。该应用程序将是一个多个用户同时完成任务的游戏,并且数据非常密集。

在此应用程序中,将聚合数据以进行用户统计信息。我想出了两个方案来实现我想要的计算所有统计数据的效果。

场景 1

维护一个单独的表来计算用户统计信息。这意味着随着移动的处理,该字段将增加 1。

Table Statistics (Moves, Origins, Points)
$Moves++; 
$Origins++
$Points = $Points + $Points;

场景 2

根据需要对所有数据中的数据字段进行计数和求和。

Table Moves (Points, Origins)
SUM(Points) 
SUM(Origins)
COUNT(Moves)

我的问题是,这两种情况中的哪一种在数据库驱动程序上最有效。我相信场景 2 可能会更有效,因为数据操作会少得多,但我不确定这些查询可能会给数据库带来多少负载。

我正在使用带有 UTF8 字符集的 MySQL 5.5 InnoDB

最佳路由将取决于点、原点和移动的读取频率与写入频率。 反过来,这些频率将取决于用例、代码风格和缓存的使用(或缺乏)。

如果没有更多详细信息,很难提供合格的意见,但请考虑这样一个事实,即专用表带来了一些额外的复杂性,即每个操作所需的额外写入方式,并确保这些数据计数必须始终正确(匹配基础详细信息数据)。 鉴于额外的复杂性,在关系数据库中存储一次而不是两次逻辑数据元素通常是最好的做法。

如果您担心性能和可扩展性,您可能需要考虑使用 Mongo 或 DynamoDB 等数据库平台的非关系方法。