什么是SQLServer中的BMK运算符


8

我试图回答这个问题,说明from子句是可选的..但是我在计划中停留在运算符上。.下面是执行计划的屏幕截图..

在此处输入图片说明

如您所见,查询计划中有BMK运算符,但没有任何指示显示其计算方式。

到目前为止,我已经尝试过的步骤:
我开始使用BMK1000进行搜索,但是它显示了使用同一运算符的一系列问题。最后,我找到了一个线程,其中显示“您要引用的BMK是保留在堆中的存储位置使用非集群索引而不是集群键。”。但是由于我没有任何索引,所以不确定与我的关系如何。

问:
什么是BMK运算符以及如何计算它。任何指针也将有帮助

这是SQLFiddle再现问题

Answers:


11

它本身不是操作员。它是堆上表扫描运算符的输出列。它是包含行的物理地址的“书签”(这与短语“书签查找”中提到的书签相同)。

它沿着管道传递到update运算符,因此它知道应该更新的行。

在SQL Server 2016中,您可以使用query_trace_column_values扩展事件查看此列的实际值

在此处输入图片说明

将这些插入sys.fn_PhysLocFormatter节目file:page:slot

SELECT sys.fn_PhysLocFormatter(0xB002000001), 
       sys.fn_PhysLocFormatter(0xB0020000010001)

退货

+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| (1:688:0)        | (1:688:1)        |
+------------------+------------------+
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.