Как кешировать в 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 server management studio
Как искать зависимости объектов в SQL Server
SQL Server. Как вызвать процедуру с переменным именем и результаты вставить в таблицу
Формирование сложного JSON объекта через SELECT в SQL Server
Как вставить данные в таблицу БД из таблицы на другом сервере
Использование CPU в SQL Server Express Edition
Чем отличается For JSON Auto от For JSON Path
Альтернатива множественному Replace
Разбор строки на части и занесение в табличную переменную
Дополнительный заработок для разработчиков на T-SQL
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта