Apa itu BMK Operator di SQLServer

8

Saya mencoba menjawab pertanyaan ini yang menyatakan dari klausa adalah opsional..Tapi saya terjebak dengan Operator dalam rencana .. di bawah ini adalah screenshot dari rencana eksekusi ..

masukkan deskripsi gambar di sini

Seperti yang Anda lihat ada operator BMK dalam rencana kueri, tetapi tidak ada indikasi yang menunjukkan bagaimana ini dihitung ..

langkah yang telah saya coba sejauh ini:
Saya mulai mencari dengan BMK1000, tetapi ia menunjukkan banyak pertanyaan dengan operator yang sama. Akhirnya saya menemukan satu utas yang mengatakan "BMK yang Anda referensikan adalah lokasi penyimpanan di dalam tumpukan yang disimpan dengan indeks nonclustered, bukan kunci kluster. ".. Tapi tidak yakin bagaimana ini terkait dengan saya, karena saya tidak memiliki indeks ..

TANYAKAN:
apa operator BMK dan bagaimana cara menghitungnya. Setiap pointer juga akan sangat membantu

Berikut adalah SQLFiddle untuk Repro masalah ini

TheGameiswar
sumber

Jawaban:

11

Itu bukan operator dalam dirinya sendiri. Ini adalah kolom output dari operator pemindaian tabel pada heap. Ini adalah "bookmark" yang berisi alamat fisik dari baris (ini adalah bookmark yang sama seperti yang disebutkan dalam frasa "pencarian bookmark").

Ini dilewatkan di sepanjang pipa ke operator pembaruan sehingga tahu baris yang harus diperbarui.

Di SQL Server 2016 Anda bisa melihat nilai aktual untuk kolom ini dengan menggunakan query_trace_column_valuesperistiwa yang diperluas

masukkan deskripsi gambar di sini

Memasukkannya ke sys.fn_PhysLocFormattermenunjukkanfile:page:slot

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

Kembali

+------------------+------------------+
| (No column name) | (No column name) |
+------------------+------------------+
| (1:688:0)        | (1:688:1)        |
+------------------+------------------+
Martin Smith
sumber