Индекс на динамическое значение

Добрый день, гуру =)
Проблема моя в следующем.

В моей системе есть ряд таблиц, отвечающих за баланс пользователя, например tbl_deals, tbl_input_money и т.д. В этих таблицах отображается сколько средств пользователь потратил на сделки в системе, сколько средств ввел на свой баланс в аккаунте и т.д. Когда я подсчитываю баланс пользователя, я должна пройтись по всем таблицам баланса и посчитать сумму средств, которая ему доступна для того, чтобы потратить в системе (т.е. сумма, которую он ввел в систему за минусом всех потраченных). За подсчет таких средств отвечает функция f_access_money(_id_user);
Если считать баланс для одного пользователя, она быстро работает. Если же начать подсчет для 40 тыс. пользователей в моей системе, то естественно выполнение затягивается в разы!
Представьте, что мне нужно выбрать тех пользователей, баланс которых отличается от 0.

select id_user
from tbl_users
where user_status = 'buyer' AND f_access_money(id_user) > 0.00;

И тогда мой запрос зависает на полторы минуты. Я пыталась сделать индекс на эту функцию, конечно это меня спасло. Но как только я получила еще одного пользователя с ненулевым балансом, то в вывод по запросу он не попал. Я пересоздала индекс, и только тогда пользователь появился в выводе. Отсюда я сделала вывод, что создавать индекс на динамическое значение неверно. Но тогда я снова возвращаюсь к проблеме слишком медленного выполнения запроса.

В то же время хранить баланс как статическое значение мне кажется не совсем верным, т.к. пользователь постоянно совершает какие-то действия в аккаунте по покупке/продаже.

Поделитесь мыслями по моей проблеме.
Заранее спасибо.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Используйте

Используйте триггеры.
Создайте таблицу текущего баланса пользователей и каждую операцию списывания/пополнения проводите через триггер, изменяющий значения в данной таблице.
Таким образом вы легко сможете всегда видеть баланс пользователей хоть по одному, хоть всем скопом.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023