none
请问‘计算标量’,’常量扫描‘这两个执行计划运算符什么意思? RRS feed

  • 问题

  • 向一个聚集索引表插入一条记录,查看执行计划出现了两个计算标量运算符和一个常量扫描运算符

    问题一:为什麽会出现两个计算标量运算符

    问题二:计算标量运算符是什么意思,常量扫描运算符是什么意思?

    表中只有20条不到的记录,只有一个聚集索引

    2013年8月27日 1:25

答案

全部回复

  • Sql server Insert执行的秘密(上)一个最简单的INSERT分析 看一下这篇文章跟你提到的是否一致

    Please Mark As Answer if it is helpful.

    2013年8月27日 2:11
  • 关于运算符,详见http://technet.microsoft.com/zh-cn/library/ms191158.aspx

    Compute Scalar表示要对表达式求值。为啥这个简单的'1'要求值呢?最大的原因可能是表里面有计算列,默认值之类的公式需要求值。

    Constant Scan也很可能跟计算列、默认值有关。你把鼠标放到这些运算符上,会有更详细的解释。


    想不想时已是想,不如不想都不想。

    2013年8月27日 8:04
    版主
  • 放到运算符上当然可以看到解释,不过这些太笼统了个人觉得

    表脚本是这样的,并没有默认值跟计算列

    CREATE TABLE [dbo].[SystemPara](
    	[RecordNo] [int] IDENTITY(1,1) NOT NULL,
    	[ParaValue] [varchar](50) NULL,
    	[Name] [varchar](50) NULL,
    	[Description] [varchar](50) NULL,
     CONSTRAINT [PK_SystemPara] PRIMARY KEY CLUSTERED 
    (
    	[RecordNo] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO

    我用SET STATISTICS PROFILE ON看了,原来这两个计算标量运算符里需要隐式转换并且有一个自增列也需要计算

    所以才出现计算标量这个运算符


    Compute Scalar
    DEFINE:([Expr1004]=CONVERT_IMPLICIT(varchar(50),[@1],0), [Expr1005]=CONVERT_IMPLICIT(varchar(50),[@2],0), [Expr1006]=CONVERT_IMPLICIT(varchar(50),[@3],0))

    [Expr1004]=CONVERT_IMPLICIT(varchar(50),[@1],0), [Expr1005]=CONVERT_IMPLICIT(varchar(50),[@2],0), [Expr1006]=CONVERT_IMPLICIT(varchar(50),[@3],0)


    [Expr1003], [Expr1004], [Expr1005], [Expr1006]

    -------------------------------------------------------------------------------

    Compute Scalar

    DEFINE:([Expr1003]=getidentity((277576027),(14),NULL))

    [Expr1003]=getidentity((277576027),(14),NULL)

    [Expr1003]

    2013年8月27日 13:14
  • 建议你把关注点放在跟执行效率有关的地方。追求这些细枝末节,对一个DBA来说是没有意义的。

    就像以前有人在问exists (select 1和select *哪个效率高一样。


    想不想时已是想,不如不想都不想。

    2013年8月27日 13:42
    版主
  • 谢谢怡红公子大侠的提醒,不过因为本人要写一篇关于执行计划的总结文章,需要解释每个执行计划的作用和意思

    所以,问得比较详细,望怡红公子大侠见谅

    2013年8月27日 15:24