Durante l'analisi , SQL Server chiama sqllang!DecodeCompOp
per determinare il tipo di operatore di confronto presente:
Ciò si verifica molto prima che venga coinvolto qualcosa nell'ottimizzatore.
Da operatori di confronto (Transact-SQL)
Tracciare il codice utilizzando un debugger e simboli pubblici *, sqllang!DecodeCompOp
restituisce un valore nel registro eax
** come segue:
╔════╦══════╗
║ Op ║ Code ║
╠════╬══════╣
║ < ║ 1 ║
║ = ║ 2 ║
║ <= ║ 3 ║
║ !> ║ 3 ║
║ > ║ 4 ║
║ <> ║ 5 ║
║ != ║ 5 ║
║ >= ║ 6 ║
║ !< ║ 6 ║
╚════╩══════╝
!=
ed <>
entrambi restituiscono 5, quindi sono indistinguibili in tutte le operazioni successive (inclusi compilazione e ottimizzazione).
Sebbene secondario rispetto al punto precedente, è anche possibile (ad es. Usare il flag di traccia non documentato 8605) guardare l'albero logico passato all'ottimizzatore per confermare che entrambi !=
e <>
mappare su ScaOp_Comp x_cmpNe
(non uguale confronto operatore scalare).
Per esempio:
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);
entrambi producono:
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, Not Owned, Value = 4)
AncOp_PrjList
Le note
* Uso WinDbg ; sono disponibili altri debugger. I simboli pubblici sono disponibili tramite il solito server dei simboli Microsoft. Per ulteriori informazioni, vedere Approfondimento su SQL Server utilizzando Minidumps dal team di consulenza clienti di SQL Server e debug di SQL Server con WinDbg, un'introduzione di Klaus Aschenbrenner.
** L'uso di EAX su derivati Intel a 32 bit per ottenere valori di ritorno da una funzione è comune. Certamente l'ABI Win32 lo fa in questo modo, e sono abbastanza sicuro che eredita quella pratica dai vecchi tempi di MS-DOS, dove AX era usato per lo stesso scopo - Michael Kjörling