Я смог найти similar и close-match вопросы относительно моего запроса. Но я хочу знать, есть ли лучшие способы сделать то же самое.Условный счет и группа по данным в реальном времени
У меня есть таблица базы данных, которая заполняется вызовом конечной точки веб-сервиса. Конечная точка вызывается, когда происходит определенное событие, и новая запись вставляется в эту таблицу. События происходят в режиме реального времени, и нет установленной частоты или схемы появления событий.
таблица выглядит следующим образом:
CREATE TABLE MyTbl(id int, type nvarchar(10), timestamp datetime, category nvarchar(50));
Я выборки данных из таблицы как:
SELECT category,
COUNT(CASE WHEN type = 'sent' THEN 1 END) sent,
COUNT(CASE WHEN type = 'received' THEN 1 END) received,
COUNT(CASE WHEN type = 'blocked' THEN 1 END) blocked,
COUNT(CASE WHEN type = 'opened' THEN 1 END) opened
FROM MyTbl
WHERE timestamp >= '2013-01-01 00:00:00' AND timestamp < '2013-02-01 00:00:00'
GROUP BY category
подробности о database schema
, sample data
и select-query
для отчета доступна here.
Учитывая, что: данные
- подается в таблицу в режиме реального времени
- таблица будет хранить большой объем данных, прибл. 10,00,000+ запись
- структуры отчета-запрос не изменится
- данных будет фильтроваться на категории, дата-от даты и к (все необязательные параметры)
- время не имеет значения, только дата часть
будет ли это хорошая идея, чтобы запустить запланированное задание, которое будет работать и периодически обновлять новую таблицу со значениями из MyTbl
? Новая таблица будет выглядеть так, как запрос отчета:
Date | Category | Sent | Received | Blocked | Opened
и эта таблица будет запрошена применением категорий и даты фильтров.
Негативы такого подхода:
- Мы по-прежнему должны поддерживать данные на ежедневной основе
- Мы все еще должны применить GROUP BY и SUM
- Там может быть больше операций с базами данных, необходимых, чем исходный подход
- Мы не получим все данные, которые поступают в режиме реального времени.
Положительных этого подхода:
- Может ускорить записи выборки из базы данных, которая может ускорить процесс отображения, сортировки и пейджинговой
Является ли это жизнеспособным подходом? Есть ли другие способы ускорить процесс? Пожалуйста помоги!
использование LINQ To SQL –
вы также можете попробовать хранимую процедуру. они выполняются намного быстрее, чем sql-запрос –
@sourabhdevpura, это выполняется только с использованием хранимой процедуры. Я использовал SQL-запрос, чтобы сделать его простым. –