SQLServerのBMKオペレーターとは


8

私は節からのこの質問に答えようとしていましたが、オプションです。しかし、計画のオペレーターに行き詰まっています。以下は実行計画のスクリーンショットです。

ここに画像の説明を入力してください

ご覧のとおり、クエリプランにはBMK演算子がありますが、計算方法は示されていません。

手順は、私がこれまで試してみました:
私はBMK1000を探し始めたが、それは同じで質問の束を示しoperator.finally私は1つの見つかったスレッドあなたがしている参照が保たれますヒープ内の保管場所であることを」BMKを語りますクラスターキーの代わりに非クラスター化インデックスを使用します。 "..しかし、これがどのように私と関連しているかはわかりません。インデックスがないためです。

質問:
BMK演算子とは何であり、それはどのように計算されます。任意のポインターも役立ちます

ここに問題を再現するSQLFiddleがあります

回答:


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)        |
+------------------+------------------+
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.