私は仮想通貨システムを構築しています。リアルマネーに位置するため、データの正確な保持は非常に重要な目標です。ユーザーウォレットが固定金額(「金額」)を持たないように通貨を構築しています。むしろ、それらはそのウォレットとの間のすべてのトランザクションのネットです。ビットコインのようなものです。インデックスは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]
というインデックスを付けるべきですが、私は非常に不確実です。