Что такое BMK Operator в SQLServer?

8

Я пытался ответить на этот вопрос, заявив, что из условия не является обязательным ... Но я застрял с оператором в плане ... ниже скриншот плана выполнения ..

введите описание изображения здесь

Как видите, в плане запроса есть оператор BMK, но нет указаний на то, как он рассчитывается.

шаги, которые я до сих пор пробовал:
я начал поиск с BMK1000, но он показывает кучу вопросов с одним и тем же оператором. Наконец я нашел один поток, который говорит: «BMK, на который вы ссылаетесь, является местом хранения в куче, которая хранится с некластеризованным индексом вместо ключа кластера. ".. Но не уверен, как это связано со мной, так как у меня нет никаких индексов ..

СПРОСИТЕ:
что такое оператор BMK и как он рассчитывается. Любые указатели также будут полезны

Вот SQLFiddle для воспроизведения проблемы

TheGameiswar
источник

Ответы:

11

Это не оператор сам по себе. Это выходной столбец оператора сканирования таблицы в куче. Это «закладка», которая содержит физический адрес строки (это та же самая закладка, на которую ссылается фраза «поиск закладок»).

Это передается по конвейеру в оператор обновления, поэтому он знает строку, которую должен обновлять.

В 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)        |
+------------------+------------------+
Мартин Смит
источник