Построение отчета на основе данных большой таблицы, которая часто изменяется

Вводная в проблему

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

При построении отчетов по ней будут запросы будут медленно обрататывать.

Возможное решение - поставить индексы. Но это может негативно сказаться на быстродействии операций insert, update. В таблицу постоянно добавляются новые строки. 

Чем больше индексов, тем дольше будет выполняться insert. 

Как же быть? Без индексов совсем запрос не работает, а вешать индекс не хочется, чтобы не ухудшать опыт пользователя только для того, чтобы построить некие графики. 

Решение

На частодобавляемую таблицу мы не добавляем дополнительных индексов. Пусть операции insert выполняются максимально быстро.

А отчеты будем строить на основе другой таблицы, в которую данные периодически добавляются (например, 1 р в день). И в этой таблице будут все необходимые фильтры. 

Более того, данную таблицу можно вынести в отдельную базу данных. 

Таким образом мы избегаем добавления лишних индексов на таблицу с часто добавляемыми данными, и при этом оптимизируем данные под нужную задачу (например, при добавлении во вспомогательную таблицу мы можем проводить дополнительную обработку). 

Пример добавления в такую таблицу: 

        insert into as_pv(traceID, fullurl, username, created, referrer,falconGuid, url)
        select  id, url,   username,  created, referrer, falconGuid,
        substring(url, 1, iif(CHARINDEX('?', url)>1, CHARINDEX('?', url)-1, 1000))
        from as_trace 
        where code='pv' and created > dateadd(month, -1, getdate()) and  id not in (select traceID from  as_pv)

В данном случае в URL мы сохраняем адрес без параметров(все что идет после знака "?"). 

Производная таблица имеет ссылку на оригинальную таблицу (traceID с отношением 1:1) для тогго, чтобы при повторном запросе не записывались дубли. 

Минус подобного решения - данные для анализа попадают не сразу, а по некоему периоду (с другой стороны можно сделать кнопку Обновления данных в таблице для вывода отчета - для дописывания строк из основной таблицы). 

Насколько полезной была статья?

Что еще посмотреть по SQL Server

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK