回答

1

理論認爲,如果您限制您的SELECT列僅包含感興趣的列,那麼只有在這些列發生更改時纔會收到通知。然而,Understanding When Query Notifications Occur有這樣的警告:

注意,SQL服務器可以響應生成查詢通知 事件不改變數據,或響應這一變化 實際上並不影響的結果查詢。例如,如果 UPDATE語句更改查詢返回的行之一,即使對該行的更新沒有更改查詢結果中的 列,也可能觸發 通知。

所以你得到誤報。

+0

「該理論認爲」在我的測試中,它不幸只有理論。我有一個SELECT連接三個表,每次更改都無論在哪個表中,都會導致重置緩存。無論改變的列是在我的通知選擇或不是。我的選擇是:「SELECT dbo.users.name,dbo.databases.connection_string \t \t \t 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「 – Barney 2013-02-14 15:09:53

+2

考慮將相關表格垂直分解爲'stable'列表和'volatile'列表。它*會影響設計,但是如果你有一個高度不穩定的列,不斷使你的緩存無效,那麼它可能是值得的。顯然還有很多因素需要考慮,如果您的情況可行,您應該比我更瞭解我。 – 2013-02-14 19:26:52