Sql server system_user是否在SQL语句中多次运行?
我有许多查询使用我们网络中的系统功能。这只是一个非常基本的表示。系统函数的一些实际位置位于存储过程、视图和触发器中,一些位于简单查询中,另一些位于相当复杂的查询中。目前,我们正在进行一次完整的系统审查,这种情况是向我提出的:Sql server system_user是否在SQL语句中多次运行?,sql-server,sqlperformance,Sql Server,Sqlperformance,我有许多查询使用我们网络中的系统功能。这只是一个非常基本的表示。系统函数的一些实际位置位于存储过程、视图和触发器中,一些位于简单查询中,另一些位于相当复杂的查询中。目前,我们正在进行一次完整的系统审查,这种情况是向我提出的: SELECT TOP(100) p.Id, p.Name, CASE WHERE SYSTEM_USER = 'ME' THEN 'It is Me.' ELSE 'It is not Me.' END as IsItMe FROM dbo.Person p WH
SELECT TOP(100) p.Id, p.Name,
CASE WHERE SYSTEM_USER = 'ME' THEN 'It is Me.' ELSE 'It is not Me.' END as IsItMe
FROM dbo.Person p
WHERE 1 = 1
如果我返回100条记录,至少根据顶部(100条),CASE语句会运行100次还是查询分析器只运行一次,因为返回的每条记录的结果都是相同的
仅供参考…我们正在使用SQL Server 2014,以防版本之间存在任何差异。这取决于功能 在
SYSTEM\u USER
的这种特定情况下,当SYSTEM\u USER='ME'然后是'It is ME'。否则'It is not ME'。结束为IsItMe时,整个表达式的计算结果为
你可以从照片上看到这一点
DECLARE @T TABLE(X INT)
SELECT TOP(100) CASE WHEN SYSTEM_USER = 'ME' THEN 'It is Me.' ELSE 'It is not Me.' END as IsItMe
FROM @T
OPTION (RECOMPILE
, QUERYTRACEON 3604
, QUERYTRACEON 8605
, QUERYTRACEON 8606
)
最初的树是
LogOp_Top NoTies
LogOp_Project COL: Expr1003
LogOp_Get TBL: @T @T TableID=-1530594778 TableReferenceID=0 IsRow: COL: IsBaseRow1001 Hints( NOLOCK )
AncOp_PrjList
AncOp_PrjEl COL: Expr1003
ScaOp_IIF varchar collate 872468488,Var,Trim,ML=13
ScaOp_Comp x_cmpEq
ScaOp_Intrinsic suser_sname
ScaOp_Const TI(varbinary,Var,Trim,ML=1) XVAR(varbinary,Not Owned,Value=EMPTY)
ScaOp_Const TI(nvarchar collate 872468488,Var,Trim,ML=4) XVAR(nvarchar,Owned,Value=Len,Data = (4,7769))
ScaOp_Const TI(varchar collate 872468488,Var,Trim,ML=9) XVAR(varchar,Not Owned,Value=Len,Data = (9,It is Me.))
ScaOp_Const TI(varchar collate 872468488,Var,Trim,ML=13) XVAR(varchar,Not Owned,Value=Len,Data = (13,It is not Me.))
ScaOp_Const TI(bigint,Null,ML=8) XVAR(bigint,Not Owned,Value=100)
ScaOp_Const TI(bigint,ML=8) XVAR(bigint,Not Owned,Value=0)
很早就转化为
*** Input Tree: ***
LogOp_Top NoTies
LogOp_Project COL: Expr1003
LogOp_Get TBL: @T @T TableID=-1530594778 TableReferenceID=0 IsRow: COL: IsBaseRow1001 Hints( NOLOCK )
AncOp_PrjList
AncOp_PrjEl COL: Expr1003
ScaOp_Identifier COL: ConstExpr1004
ScaOp_Const TI(bigint,Null,ML=8) XVAR(bigint,Not Owned,Value=100)
ScaOp_Const TI(bigint,ML=8) XVAR(bigint,Not Owned,Value=0)
使用
Expr1003
引用常量表达式时,它取决于函数
在SYSTEM\u USER
的这种特定情况下,当SYSTEM\u USER='ME'然后是'It is ME'。否则'It is not ME'。结束为IsItMe时,整个表达式的计算结果为
你可以从照片上看到这一点
DECLARE @T TABLE(X INT)
SELECT TOP(100) CASE WHEN SYSTEM_USER = 'ME' THEN 'It is Me.' ELSE 'It is not Me.' END as IsItMe
FROM @T
OPTION (RECOMPILE
, QUERYTRACEON 3604
, QUERYTRACEON 8605
, QUERYTRACEON 8606
)
最初的树是
LogOp_Top NoTies
LogOp_Project COL: Expr1003
LogOp_Get TBL: @T @T TableID=-1530594778 TableReferenceID=0 IsRow: COL: IsBaseRow1001 Hints( NOLOCK )
AncOp_PrjList
AncOp_PrjEl COL: Expr1003
ScaOp_IIF varchar collate 872468488,Var,Trim,ML=13
ScaOp_Comp x_cmpEq
ScaOp_Intrinsic suser_sname
ScaOp_Const TI(varbinary,Var,Trim,ML=1) XVAR(varbinary,Not Owned,Value=EMPTY)
ScaOp_Const TI(nvarchar collate 872468488,Var,Trim,ML=4) XVAR(nvarchar,Owned,Value=Len,Data = (4,7769))
ScaOp_Const TI(varchar collate 872468488,Var,Trim,ML=9) XVAR(varchar,Not Owned,Value=Len,Data = (9,It is Me.))
ScaOp_Const TI(varchar collate 872468488,Var,Trim,ML=13) XVAR(varchar,Not Owned,Value=Len,Data = (13,It is not Me.))
ScaOp_Const TI(bigint,Null,ML=8) XVAR(bigint,Not Owned,Value=100)
ScaOp_Const TI(bigint,ML=8) XVAR(bigint,Not Owned,Value=0)
很早就转化为
*** Input Tree: ***
LogOp_Top NoTies
LogOp_Project COL: Expr1003
LogOp_Get TBL: @T @T TableID=-1530594778 TableReferenceID=0 IsRow: COL: IsBaseRow1001 Hints( NOLOCK )
AncOp_PrjList
AncOp_PrjEl COL: Expr1003
ScaOp_Identifier COL: ConstExpr1004
ScaOp_Const TI(bigint,Null,ML=8) XVAR(bigint,Not Owned,Value=100)
ScaOp_Const TI(bigint,ML=8) XVAR(bigint,Not Owned,Value=0)
使用引用常量表达式的Expr1003