2016-05-12 29 views
1

我正在建立一个虚拟货币系统,因为它位于真实货币中,所以准确保留数据是一个非常关键的目标。我正在建立我的货币,以便用户钱包没有固定的价值('金额'),而是它们之间的所有交易的净额 - 有点像比特币。因此,如果我正在计算钱包的金额,我的MySQL查询看起来像这样。索引如何提高MySQL中的聚合查找速度?

SELECT (
    SELECT IFNULL(SUM(`tx`.`amount`), 0) 
    FROM `transactions` AS `tx` 
    WHERE `tx`.`to_wallet_id` = 5 
) - (
    SELECT IFNULL(SUM(`tx`.`amount`), 0) 
    FROM `transactions` AS `tx` 
    WHERE `tx`.`from_wallet_id` = 5 
) AS `net` 

此建立查询使用SUM()的汇总数据的所有交易所有交易钱包减去钱包net值。最终值表示钱包当前包含多少钱。

总之,我想知道如何优化我的表格,以便这些查询的速度和规模都非常快。

我会假设我应该索引[from_wallet_id, amount][to_wallet_id, amount],但我很不确定。

回答

1

我建议做到以下几点:

  • 制作量字段不为空。并把0作为默认值。
  • 根据你的想法([from_wallet_id, amount][to_wallet_id, amount])创建索引。 At允许运行从索引中检索所有必要数据的查询。

如果没有帮助,您可以考虑以下选项:

  • 除以2部分事务表:in_transaction和out_transaction
  • 保持聚合值在单独的表和更新它在任何变化之后。