(Ya, saya menambahkan lain menjawab. Justifikasi:Ini mengatasi masalah mendasar dengan cara yang berbeda.)
Masalah mendasar tampaknya adalah bahwa ada tabel "transaksi" yang terus berkembang yang darinya diturunkan berbagai statistik, seperti SUM(amount)
. Performa ini hanya akan semakin buruk seiring bertambahnya tabel.
Dasar dari Jawaban ini adalah melihat data dalam dua cara:"Riwayat" dan "Saat Ini". Transactions
adalah Sejarah. Tabel baru akan menjadi Current
total untuk setiap Pengguna. Tapi saya melihat banyak cara untuk melakukan itu. Masing-masing melibatkan beberapa bentuk subtotal untuk menghindari penambahan 773 ribu baris untuk mendapatkan jawabannya.
- Cara perbankan tradisional... Setiap malam menghitung
Transactions
dan tambahkan keCurrent
. - Cara Tampilan Terwujud... Setiap kali baris ditambahkan ke
Transactions
, naikkanCurrent
. - Hibrida:Simpan subtotal harian di "Tabel Ringkasan". Jumlahkan subtotal tersebut untuk mendapatkan
SUM
melalui tadi malam.
Diskusi lebih lanjut di blog saya di Ringkasan Tabel .
Perhatikan bahwa saldo terbaru untuk perbankan atau cara hybrid sedikit rumit:
- Dapatkan uang tadi malam
- Tambahkan Transaksi yang terjadi pada siang hari.
Pendekatan apa pun akan banyak lebih cepat daripada memindai semua 773 ribu baris untuk pengguna, tetapi ini akan menjadi kode yang lebih kompleks.