2016-05-12 119 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
  • 保持聚合值在單獨的表和更新它在任何變化之後。