首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询通知内部结构

查询通知内部结构
EN

Stack Overflow用户
提问于 2019-01-08 01:28:01
回答 1查看 273关注 0票数 0

我正在考虑使用Query Notifications作为一种轻量级的方法来标识表中的数据何时发生更改。我知道他们使用Service Broker,而且(尽管我很难解释确切的原因)他们看起来确实比CDC或触发器之类的东西更可取。

查询通知是通过向数据库提供查询来设置的,该查询将发送一个通知"[...when the results of the provided query change](https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms175110(v=sql.105%29)".

对我来说,这听起来像是他们在说,无论你给它什么查询,都会一遍又一遍地运行。我想我可能误解了SQL在幕后对该查询所做的工作,以监视所说的更改,但我在网上找不到任何关于实际发生的事情。我希望它类似于解析查询,并在查询中引用的任何对象上设置超级轻量级的“触发器”,但由于我不知道,它让我不想使用这个功能。

是否有人足够熟悉Service Broker和查询通知功能来解释数据库引擎如何监视所提供查询中的更改?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-08 03:10:27

基于与物化(索引)视图相同的技术。当您为查询"Select ... from .... where“设置一个QN时,引擎会使用相同的查询设置一个假的索引视图。无论何时运行任何DML,执行计划都必须维护“伪”索引视图数据,并相应地生成计划。当(如果) DML执行实际尝试更新伪索引视图中的行时,这是一个迹象,表明原始查询可能已经更改了结果,并触发了通知。然后删除“伪”索引视图。针说,‘假的’索引视图永远不会物化(没有实际的行存在)。

这就是查询可以订阅QN的限制几乎与索引视图限制相同的原因。

Martin链接的文章对此进行了同样的解释,但将本文留在这里作为未来参考的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54079051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档