Как кешировать в 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. Безопасная разработка на MS SQL (try catch)
SQL. Быстрый поиск хранимых процедур и таблиц в ManagementStudio
SQL. Безопасное приведение типов
SQL. Создание структуры БД через диаграммы
Как оптимизировать массовые операции Update/delete
Нюанс с долгим анализом сложных хранимок
Разработчик SQL, нужны клиенты и заказы?
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта