索引如何提高MySQL中的聚合查找速度?

时间:2016-05-12 10:12:55

标签: mysql indexing

我正在建立一个虚拟货币系统,因为它是真钱,准确保留数据是一个非常关键的目标。我正在构建我的货币,以便用户钱包没有固定值(“金额”),相反,它们是进出该钱包的所有交易的净额 - 有点像比特币。

所以,如果我正在计算钱包的数量,我的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`

此查询使用net的汇总数据构建SUM()值,所有交易一个钱包减去所有交易来自 a钱包。最终值表示钱包当前包含的金额。

简而言之,我想知道如何优化我的表格,以便这些查询非常快速且可扩展。

我认为我应该将[from_wallet_id, amount][to_wallet_id, amount]编入索引,但我很不确定。

1 个答案:

答案 0 :(得分:1)

我建议你做以下事情:

  • 使金额字段不可为空。并将0设为默认值。
  • 根据您的想法创建索引([from_wallet_id, amount][to_wallet_id, amount])。允许运行从索引中检索所有必要数据的查询。

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

  • 将交易表分为2部分:in_transaction和out_transaction
  • 将聚合值保留在单独的表中,并在任何更改后更新它。