【问题标题】:SqlCacheDependency via Service Broker Notifications - SELECT sensitive ONLY on particular columns通过 Service Broker 通知的 SqlCacheDependency - 仅在特定列上选择敏感
【发布时间】:2013-02-14 13:37:28
【问题描述】:

是否可以在 SELECT 上定义一个通知,但是以这种方式:仅当 select 中写入的列发生更改时,Broker 才会重置缓存。所以列敏感的方法。如果表中某些不重要的列被更改,我不希望缓存重置。我将有一个带有 INNER JOIN 的 SELECT。

提前感谢您的帮助。

【问题讨论】:

    标签: sql-server-2008 sql-server-2008-r2 service-broker sqlcachedependency


    【解决方案1】:

    理论上,如果您将 SELECT 列限制为仅包含感兴趣的列,则只有在这些列发生更改时才应通知您。但是Understanding When Query Notifications Occur 有这个警告:

    请注意,SQL Server 可能会生成查询通知以响应 不更改数据的事件,或响应更改的事件 实际上并不影响查询的结果。例如,当 UPDATE 语句更改查询返回的行之一, 即使对行的更新没有改变 查询结果中的列。

    所以你得到误报。

    【讨论】:

    • “理论是这样的”在我的测试中,不幸的是它只是理论。我有一个 SELECT 连接三个表,并且无论哪个表的每次更改都会导致重置缓存。无论更改的列是否在我的通知选择中。我的选择是:“SELECT dbo.users.name, dbo.databases.connection_string FROM dbo.accounts INNER JOIN dbo.databases ON dbo.accounts.database_id = dbo.databases.id INNER JOIN dbo.users ON dbo.accounts.id = dbo.users.account_id"
    • 考虑将相关表垂直拆分为“稳定”列表和“易失”列表。它确实会影响设计,但如果您有一个高度易变的列,它会不断地使您的缓存无效,那么它可能是值得的。显然还有更多的因素需要考虑,如果在你的情况下可行,你应该比我更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多