Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL SUM заявката е изключително бавна

(Да, добавям друг отговор. Обосновка:Той разглежда основния проблем по различен начин.)

Основният проблем изглежда е, че има постоянно нарастваща таблица за "транзакции", от която се извличат различни статистически данни, като SUM(amount) . Ефективността на това ще става само по-лоша и по-лоша с нарастването на таблицата(ите).

Основата за този отговор ще бъде разглеждането на данните по два начина:„История“ и „Текущи“. Transactions е Историята. Нова таблица ще бъде Current общо за всеки потребител. Но виждам много начини за това. Всеки включва някаква форма на междинна сума(и), за да се избегне добавянето на 773K реда за получаване на отговора.

  • Традиционният начин на банкиране... Всяка вечер пребройте Transactions за деня и ги добавете към Current .
  • Начинът на материализиран изглед... Всеки път, когато се добавя ред към Transactions , увеличаване на Current .
  • Хибрид:Съхранявайте дневните междинни суми в „Обобщена таблица“. Сумирайте тези междинни суми, за да получите SUM до снощи.

Още дискусия в моя блог на Обобщени таблици .

Имайте предвид, че салдото до секундата за банковия или хибридния начин е малко сложно:

  1. Вземете сумата за снощи
  2. Добавете всички транзакции, извършени през деня.

Всеки от подходите ще бъде много по-бързо от сканирането на всички 773K реда за потребителя, но ще бъде по-сложен код.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранявайте UUID v4 в MySQL

  2. MySQL SELECT най-често по групи

  3. Изберете и върнете само контролната сума (не таблицата) от таблицата на контролната сума в mysql

  4. PHP Изчислете броя на низходящата линия в двоичното дърво

  5. Как мога да експортирам няколко колони от MySQL в текстов файл