制定通知计划

若要有效地使用查询通知,应该考虑应用程序是否可以通过查询通知受益,应用程序使用的查询是否支持通知,以及应用程序订阅和接收通知将使用的策略。

如果查询中的数据更改相对较少,或数据更改时应用程序不要求立即更新,或查询满足为通知创建查询中所述的要求和限制,那么使用查询通知可提供一种便利方法来减少往返数据库的次数。许多基于 Web 的应用程序都满足这些条件,并且这些应用程序可以利用查询通知。

并非每种情况都可以通过查询通知受益。当应用程序经常读取数据库中的数据,但是相对较少进行数据更新时,查询通知是很有用的。例如,查看联机目录应用程序比更新目录更加频繁。但是,对于在线购物车,可能会经常更新特定的内容,这样查询通知的作用不大。

当应用程序执行的查询共享通用结构并且只有参数值不同时,查询通知将更加有效。例如:

SELECT ProductNumber, Name FROM Production.Product WHERE ListPrice < 300
SELECT ProductNumber, Name FROM Production.Product WHERE ListPrice < 500

在这种情况下,这两个通知的查询通知订阅共享同一个内部模板,并要求在 SQL Server 中的开销小于带有不同查询结构的两个通知的开销。但是,请注意保留查询中的参数。即使查询共享一个模板,添加 ListPrice 为 350 的项将在第二个查询上导致通知,而不是在第一个查询上。

当查询通知在表上处于活动状态时,更新该表的开销会更大。数据库引擎执行额外的工作以检查订阅并根据需要生成通知。重用内部模板有助于最小化每个订阅的开销。因此,应该仅将查询通知用于提交带有相似结构查询的应用程序。提交带有不同结构查询的应用程序不应使用查询通知。

例如,显示给定价格范围中的目录项的应用程序提交带有相同结构的查询。在这种情况下,数据库引擎可以重用每个查询的内部模板,并且查询通知可以提高性能。但是,允许生成即席报表的应用程序提交带有不同结构的查询。在这种情况下,应用程序不应使用查询通知。

只要至少有一个注册的订阅使用内部模板,数据库引擎就会维护此内部模板。数据库引擎对特定表的不同内部模板的数量有限制。达到此限制后,数据库引擎将不再注册会导致创建新模板的订阅。相反的,数据库引擎立即生成一条订阅消息,指明不能注册订阅。

请参阅

概念