Operator Skalar dalam Mencari Predikat

8

Saya telah mengikuti versi sederhana dari query saya yang sebenarnya, di SQL Server 2012. Ia memiliki operator skalar dalam mencari predikat ketika memilih data dari tabel Containers.

Apa tujuan dari operator skalar dalam mencari predikat ini?

CREATE TABLE #EligibleOrders (OrderID INT PRIMARY KEY,
                             StatusCD CHAR(3),
                              CreatedOnDate DATETIME
                              )
--insert logic into #EligibleOrders

--Final Query
SELECT T2.OrderID ,olic.LineItemID,
        SUM(c.quantity) AS ShippedQty,
        COUNT(DISTINCT c.ContainerID) AS ShippedCases
FROM #EligibleOrders T2
INNER JOIN dbo.OrderLineItemContainers (NOLOCK) AS olic 
    ON  olic.OrderID = T2.OrderID
INNER JOIN dbo.Containers (NOLOCK) AS c
    ON olic.Containerid = c.Containerid
GROUP BY T2.OrderID ,olic.LineitemID 
OPTION (MAXDOP 1)

Rencana eksekusi

masukkan deskripsi gambar di sini

Cari Predikat

masukkan deskripsi gambar di sini

LCJ
sumber

Jawaban:

10

Apa tujuan dari operator skalar dalam mencari predikat ini?

"Operator Skalar" pada olic.ContainerIDkolom dalam pertanyaan hanya menunjukkan bahwa referensi luar kolom menyediakan satu baris (skalar) per iterasi dari loop bersarang (berlaku). Ini murni arsitektur dan tidak perlu dikhawatirkan.

Detail

Secara internal, prosesor permintaan bertindak pada representasi pohon, yang pada tingkat dasar berisi kombinasi operasi relasional (bernilai tabel) dan skalar (baris tunggal).

Ketika SQL Server membangun keluaran showplan, setiap operator di pohon (yang diaktifkan untuk showplan umum) diminta untuk menghasilkan representasi cocok untuk target produksi ( SHOWPLAN_XML, SHOWPLAN_TEXT, STATISTICS XML... dan seterusnya).

The XMLformat output harus mematuhi skema showplan , yang mengandung unsur-unsur untuk kedua operator relasional dan skalar. Skema ini menetapkan elemen operator skalar di banyak tempat.

Apakah teks tertentu "Operator Skalar (...)" muncul di tooltip SSMS, di jendela Properties, atau hanya di XML mentah tergantung pada detail implementasi di setiap layer.

Misalnya, kueri sederhana:

SELECT TOP (1) 1;

... menghasilkan rencana tanpa "Operator Skalar" di tooltips SSMS, tetapi hadir untuk operator relasional Komputasi Skalar di jendela properti:

Hitung Operator Skalar Skalar

... dan hanya dalam XML mentah untuk operator relasional Top:

Operator Skalar Top

Untuk semua tujuan praktis, teks "Operator Skalar" harus diabaikan begitu saja. Itu tidak ada artinya kecuali bahwa benda yang melingkupinya adalah skalar.

Paul White 9
sumber
3

Apa tujuan dari operator skalar dalam mencari predikat ini?

Operator skalar adalah "sebagai." Itu alias kolom. Sekarang mengapa ini terjadi? Butuh sedikit penggalian dan saya masih benar-benar tidak menemukan jawaban konkret 100%. Satu-satunya referensi yang saya temukan adalah di Sql Server Execution Plans, 2nd Edition. Buku itu menyebutkan bahwa operasi ini dalam predikat pencarian terjadi ketika pengoptimal memutuskan untuk mengubah urutan bergabung atau mencari.

Anthony Genovese
sumber
2
Ini adalah dugaan yang baik oleh Grant pada saat ia menulis buku itu, tetapi itu tidak benar, saya khawatir.
Paul White 9