sql >> Databáze >  >> RDS >> Mysql

MySQL SUM Query je extrémně pomalý

(Ano, přidávám další Odpovědět. Odůvodnění:Řeší základní problém jiným způsobem.)

Zdá se, že základní problém spočívá v tom, že existuje stále rostoucí tabulka „transakcí“, ze které se odvozují různé statistiky, například SUM(amount) . Výkon tohoto se bude jen zhoršovat a zhoršovat, jak bude tabulka (tabulky) růst.

Základem této odpovědi bude podívat se na data dvěma způsoby:„Historie“ a „Aktuální“. Transactions je Historie. Nová tabulka by byla Current součty za každého uživatele. Ale vidím několik způsobů, jak to udělat. Každý z nich zahrnuje určitou formu mezisoučtu(ů), aby se zabránilo přidání 773 000 řádků k získání odpovědi.

  • Tradiční způsob bankovnictví... Každou noc počítejte denní Transactions a přidejte je do Current .
  • Způsob materializovaného zobrazení... Při každém přidání řádku do Transactions , přírůstek Current .
  • Hybridní:Uchovávejte denní mezisoučty v "Souhrnné tabulce". Sečtením těchto mezisoučtů získáte SUM přes včerejší noc.

Další diskuze v mém blogu na Souhrnné tabulky .

Všimněte si, že aktuální zůstatek pro bankovní nebo hybridní způsob je trochu složitější:

  1. Získejte částku za včerejší noc
  2. Přidejte všechny transakce, ke kterým došlo během dne.

Jakýkoli z přístupů bude hodně rychlejší než skenování všech 773 tisíc řádků pro uživatele, ale bude to složitější kód.



  1. MySQL length() vs char_length()

  2. Získejte věk člověka v MySQL

  3. volání jquery ajax pro nastavení vybraných možností z tabulky MySql

  4. Problém s dotazem na vložení ve Sqlite ? (proměnná vložení)