SqlCacheDependency через уведомления Service Broker — SELECT чувствителен ТОЛЬКО к определенным столбцам

Можно ли определить уведомление на SELECT, но таким образом: брокер сбросит кэш только в том случае, если столбцы, записанные в выборе, изменились. Итак, чувствительный к столбцам подход. Я не хочу, чтобы кеш сбрасывался, если какой-то неважный столбец в таблице изменился. У меня будет SELECT с INNER JOIN.

Заранее спасибо за помощь.


person Barney    schedule 14.02.2013    source источник


Ответы (1)


Теоретически, если вы ограничиваете свои столбцы SELECT, чтобы они содержали только интересующие столбцы, вы должны получать уведомления только в том случае, если эти столбцы изменились. Однако Понимание того, когда возникают уведомления о запросах имеет это предупреждение:

Обратите внимание, что SQL Server может выдавать уведомление о запросе в ответ на события, которые не изменяют данные, или в ответ на изменение, которое фактически не влияет на результаты запроса. Например, когда оператор UPDATE изменяет одну из строк, возвращенных запросом, уведомление может сработать, даже если обновление строки не изменило столбцы в результатах запроса.

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

person Remus Rusanu    schedule 14.02.2013
comment
Теория гласит, что в моих тестах это, к сожалению, только теория. У меня есть SELECT, который СОЕДИНЯЕТ три таблицы, и каждое изменение независимо от того, в какой таблице, приводит к сбросу кеша. Неважно, был ли измененный столбец в моем уведомлении SELECT или нет. Мой выбор: ВЫБЕРИТЕ dbo.users.name, dbo.databases.connection_string ИЗ dbo.accounts ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.databases ON dbo.accounts.database_id = dbo.databases.id ВНУТРЕННЕЕ СОЕДИНЕНИЕ dbo.users ON dbo.accounts.id = dbo .users.account_id - person Barney; 14.02.2013
comment
Рассмотрите возможность разделения соответствующих таблиц по вертикали на таблицу «стабильных» столбцов и таблицу «изменчивых» столбцов. Это действительно влияет на дизайн, но если у вас есть очень изменчивый столбец, который постоянно делает недействительными ваши кеши, это может стоить того. Очевидно, что есть еще много факторов, которые следует учитывать, и вы должны знать лучше меня, возможно ли это в вашем случае. - person Remus Rusanu; 14.02.2013