Как кешировать в SQL результаты сложных операций

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

Если ее часто вызывать, это может создать ненужную нагрузку на сервер. 

Можно организовать небольшой ручной кеш в базе данных. 

Создаем таблицу as_cache (code nvarchar(128), text nvarchar(max), date datetime). 

В ней будет храниться сгенерированное значение. Если время не прошло (например, 2 недели), то оно будет браться из этого поля. 

Если же значения нет, то запускаем процесс обработки и сохраняем значение в таблице. 

declare @key nvarchar(128) = 'yandexturbo_'+ isnull(@domain ,'') +'_' + @page  , '')
declare @res nvarchar(max)
select top 1 @res = text from as_cache where code = @key and date > dateadd(week, -1, getdate() ) order by id desc
if(isnull(@s, '') = '') begin 
       
   --- вызываем некую сложную процедуру ... и сохраняем в @res 

   delete from as_cache  where code = @key  -- удаляем старые копии
   insert into as_cache (date, code, text) values(getdate(), @key, @s1)
end 

При первом обращении мы создадим запись в таблице. При втором - мы уже не будем вызывать тяжелую процедуру, а возьмем закешированное значение. 

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

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

Разработчик SQL, нужны клиенты и заказы?

Прямые заказы от клиентов. Нужно знать только SQL и HTML
Работа на MS SQL Server

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

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