(Да, добавям друг отговор. Обосновка:Той разглежда основния проблем по различен начин.)
Основният проблем изглежда е, че има постоянно нарастваща таблица за "транзакции", от която се извличат различни статистически данни, като SUM(amount)
. Ефективността на това ще става само по-лоша и по-лоша с нарастването на таблицата(ите).
Основата за този отговор ще бъде разглеждането на данните по два начина:„История“ и „Текущи“. Transactions
е Историята. Нова таблица ще бъде Current
общо за всеки потребител. Но виждам много начини за това. Всеки включва някаква форма на междинна сума(и), за да се избегне добавянето на 773K реда за получаване на отговора.
- Традиционният начин на банкиране... Всяка вечер пребройте
Transactions
за деня и ги добавете къмCurrent
. - Начинът на материализиран изглед... Всеки път, когато се добавя ред към
Transactions
, увеличаване наCurrent
. - Хибрид:Съхранявайте дневните междинни суми в „Обобщена таблица“. Сумирайте тези междинни суми, за да получите
SUM
до снощи.
Още дискусия в моя блог на Обобщени таблици .
Имайте предвид, че салдото до секундата за банковия или хибридния начин е малко сложно:
- Вземете сумата за снощи
- Добавете всички транзакции, извършени през деня.
Всеки от подходите ще бъде много по-бързо от сканирането на всички 773K реда за потребителя, но ще бъде по-сложен код.