Кэширование запроса SQL Server с несколькими наборами результатов

Я пытаюсь кэшировать хранимую процедуру SQL с несколькими наборами результатов, используя класс SQLCacheDependency. Первые три запроса в хранимой процедуре являются общими для всех пользователей веб-сайта, а четвертый извлекает данные, отфильтрованные по имени пользователя.

Поскольку четвертый запрос в хранимой процедуре фильтруется по имени пользователя, означает ли это, что класс SQLCacheDependency будет удалять все наборы результатов из кэша каждый раз, когда его выполняет другой пользователь, или это означает, что он будет обращаться к базе данных для получить результаты четвертого запроса в хранимой процедуре и получить результаты первых 3 запросов из кеша?

заранее спасибо


person Curious Coder    schedule 28.01.2012    source источник


Ответы (1)


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

класс SqlCacheDependency отслеживает определенную таблицу базы данных SQL Server. При изменении таблицы элементы, связанные с этой таблицей, удаляются из кэша, и в кэш добавляется новая версия элемента.

Вероятно, вам следует разделить все 3 первых запроса, кэшировать их независимо, а не кэшировать 4-й. Кэширование действительно предназначено для амортизации стоимости дорогостоящей операции (в данном случае SQL-запроса) для многих пользователей. Если вы хотите сохранить что-то, относящееся к конкретному пользователю, это Session, файлы cookie и ViewState предназначены для.

person Chris Shain    schedule 29.01.2012