sql-server – lt;gt;和!=在SQL Server中性能相同的权威来源
|
在SO上考虑 this answer可以向提问者保证关于<>经营者:
但随后一位评论者说道:
我确信这是错误的,但为了解决潜在的怀疑论者,我想知道是否有人可以提供权威或规范来源来证明这些运算符不仅在功能上相同,而且在所有方面都相同? 解决方法在解析期间,SQL Server调用sqllang!DecodeCompOp来确定存在的比较运算符的类型:这种情况发生在优化器中涉及的任何内容之前.
使用调试器和公共符号跟踪代码*,sqllang!DecodeCompOp在寄存器eax **中返回一个值,如下所示: ╔════╦══════╗ ║ Op ║ Code ║ ╠════╬══════╣ ║ < ║ 1 ║ ║ = ║ 2 ║ ║ <= ║ 3 ║ ║ !> ║ 3 ║ ║ > ║ 4 ║ ║ <> ║ 5 ║ ║ != ║ 5 ║ ║ >= ║ 6 ║ ║ !< ║ 6 ║ ╚════╩══════╝ !=和<>两者都返回5,因此在所有后续操作(包括编译和优化)中都无法区分. 虽然次要的是上述观点,但也可以(例如使用未记录的跟踪标志8605)查看传递给优化器的逻辑树,以确认两者都是!=和<>映射到ScaOp_Comp x_cmpNe(不等于标量运算符比较). 例如: 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); 两者都产生:
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
脚注 *我用WinDbg;其他调试器可用.公共符号可通过常用的Microsoft符号服务器获得.有关详细信息,请参阅SQL Server客户咨询团队的Looking deeper into SQL Server using Minidumps和Klaus Aschenbrenner的SQL Server Debugging with WinDbg – an Introduction. **在32位英特尔衍生产品上使用EAX来获取函数的返回值很常见.当然,Win32 ABI就是这样做的,而且我很确定它在旧的MS-DOS时代继承了这种做法,其中AX用于同一目的 – Michael Kj?rling (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- IDC市场狂潮再起——亿诺网再掀IDC市场狂潮
- HP个人工作站xw8000荣获2003《e制造》推荐奖
- Sql Server中如何取出多个字段列中的最大值和最小值
- Win10开始菜单怎么变回Win7风格
- sql-server-2008 – SQL Server Express的任务调度程序
- 解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMem
- 来自外部应用程序的Access数据库中的日期字段的月份名称(C#
- html中dom元素滚动条滚动控制小结详解
- NT 4用户恋旧 Windows Server 2003进军缓慢
- SQL Server 2012中使用T-SQL操作FileTable目录实例

浙公网安备 33038102330466号