Selama parsing , SQL Server panggilan sqllang!DecodeCompOp
untuk menentukan jenis operator perbandingan yang ada:
Ini terjadi jauh sebelum apa pun dalam pengoptimal terlibat.
Dari Operator Perbandingan (Transact-SQL)
Menelusuri kode menggunakan debugger dan simbol publik *, sqllang!DecodeCompOp
mengembalikan nilai dalam register eax
** sebagai berikut:
╔════╦══════╗
║ Op ║ Code ║
╠════╬══════╣
║ < ║ 1 ║
║ = ║ 2 ║
║ <= ║ 3 ║
║ !> ║ 3 ║
║ > ║ 4 ║
║ <> ║ 5 ║
║ != ║ 5 ║
║ >= ║ 6 ║
║ !< ║ 6 ║
╚════╩══════╝
!=
dan <>
keduanya menghasilkan 5, sehingga tidak dapat dibedakan dalam semua operasi selanjutnya (termasuk kompilasi & optimisasi).
Meskipun sekunder untuk titik di atas, dimungkinkan juga (misalnya menggunakan jejak bendera tidak berdokumen 8605) untuk melihat pohon logis yang diteruskan ke pengoptimal untuk mengkonfirmasi keduanya !=
dan <>
memetakannya ScaOp_Comp x_cmpNe
(bukan perbandingan operator skalar yang sama).
Sebagai contoh:
SELECT P.ProductID FROM Production.Product AS P
WHERE P.ProductID != 4
OPTION (QUERYTRACEON 3604, QUERYTRACEON 8605);
SELECT P.ProductID FROM Production.Product AS P
WHERE P.ProductID <> 4
OPTION (QUERYTRACEON 3604, QUERYTRACEON 8605);
keduanya menghasilkan:
LogOp_Project QCOL: [P] .ProductID
LogOp_Select
LogOp_Get TBL: Production.Product (alias TBL: P)
ScaOp_Comp x_cmpNe
ScaOp_Identifier QCOL: [P] .ProductID
ScaOp_Const TI (int, ML = 4) XVAR (int, Tidak Dimiliki, Nilai = 4)
AncOp_PrjList
Catatan kaki
* Saya menggunakan WinDbg ; debuggers lain tersedia. Simbol publik tersedia melalui server simbol Microsoft yang biasa. Untuk informasi lebih lanjut, lihat Melihat lebih dalam ke SQL Server menggunakan Minidumps oleh Tim Penasihat Pelanggan SQL Server dan SQL Server Debugging dengan WinDbg - sebuah Pengantar oleh Klaus Aschenbrenner.
** Menggunakan EAX pada turunan Intel 32-bit untuk nilai pengembalian dari suatu fungsi adalah hal biasa. Tentu saja Win32 ABI melakukannya dengan cara itu, dan saya cukup yakin itu mewarisi praktik itu dari masa MS-DOS, di mana AX digunakan untuk tujuan yang sama - Michael Kjörling