SQLServer 中的 BMK 运算符是什么

The*_*war 9 sql-server execution-plan operator

我试图回答这个问题,说明 from 子句是可选的。

在此处输入图片说明

如您所见,查询计划中有 BMK 运算符,但没有指示显示它是如何计算的。

到目前为止
尝试过的步骤:我开始使用 BMK1000 进行搜索,但它显示了一堆使用相同运算符的问题。最后我找到了一个线程,上面写着“您所引用的 BMK 是堆中的存储位置,被保留使用非聚集索引而不是簇键。”..但不确定这与我有什么关系,因为我没有任何索引..

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

这是重现问题的SQLFiddle

Mar*_*ith 12

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

这沿着管道传递到更新操作符,因此它知道它应该更新的行。

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

在此处输入图片说明

将这些插入sys.fn_PhysLocFormatter显示file:page:slot

SELECT sys.fn_PhysLocFormatter(0xB002000001), 
       sys.fn_PhysLocFormatter(0xB0020000010001)
Run Code Online (Sandbox Code Playgroud)

退货

+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| (1:688:0)        | (1:688:1)        |
+------------------+------------------+
Run Code Online (Sandbox Code Playgroud)