Есть ли эффективная практика замены SELECT COUNT (*) на таблицу строкой [Counter] для создания панели мониторинга в реальном времени? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть проект, в котором мы отслеживаем выступления всех пользователей и отображаем их на информационной панели.Панель инструментов обновляется каждые 30 секунд.

Я отслеживаю действия пользователей в таблице с именем Logs и строками:

[IdUser] [IDActionType] [DateTimeAction]

Теперь для некоторых клиентов таблица теперь имеет10 миллионов строкЭто хорошо для ведения журнала, но не для панели инструментов, где вы делаете SELECT COUNT BETWEEN XDate AND YDate каждые 30 секунд.(Существует несколько запросов и несколько графиков, для примера это просто упрощено.)

Есть ли лекции, тексты, веб-сайты, рассказывающие об оптимизации базы данных / передовых методах создания таблиц для панели мониторинга.

Я думаю о том, чтобы сделать одну таблицу за графиком, и каждая таблица будет выглядеть следующим образом:

CREATE TABLE GRAPH_USERS_ACTIONS ( [Day], [Action], [Counter] )

Где бы я просто увеличил счетчик.Они могут выполнять 500 действий в день, поэтому я могу разделить строки после одного года на 500 и удалить строки старше одного года без удаления журналов.

Это хорошая практика?Я ненавижу это, потому что это повторение данных, которые мы могли бы получить, просто выполнив

SELECT COUNT(*) FROM Logs where DateTime Between 00:00:00 AND 23:59:59

Но этот выбор так долго выполняется на серверах старых клиентов.

И знаете ли вы какие-либо подробныестатьи на эту тему?

...