• 执行计划之Insert,update,delete


     运行以下sql。

    INSERT INTO [AdventureWorks].[Person].[Address] (  [AddressLine1], [AddressLine2], [City], [StateProvinceID], [PostalCode], [rowguid], [ModifiedDate]

    ) VALUES (   '1313 Mockingbird Lane', 'Basement', 'Springfield', '79', '02134', NEWID(), GETDATE() ) ;

    执行计划如下图:

     

    首先我们看到的是一个常量扫描(Constant Scan)

          做的工作是根据用户输入的sql中的常量生成一个行。

     常量扫描会引入一个或者多个常量行到一个查询中;通常情况下紧跟常量扫描的是计算标量运算符,计算标量运算符会为常量扫描运算符产生的行添加列。

    计算标量(Compute Scalar)操作符调用一个getidentity函数。生成自增id的值,这一步输出了一个表达式expr1003

    另一个标量操作符为其他数据生成一系列占位符并生成一个uniqueidentifier值,时间类型的数据来自于getdate()函数。

    所有这些传递给聚集索引插入操作符。将数据插入到表中。如下图,将之前产生的表达式的值赋给列。

     聚集索引查找,因为StateProvinceID是外键,要查找stateProcience表是否存在此值。

    如上图:这步中查找的对象是PK_StateProvince_StateProvinceID即StateProcince表。如果此表非常大时,扫描的开销也是非常大的。由此可以看出外键约束的影响,斟酌考虑。

    断言(Assert):判断Expr1014的值是否为0.如果为0,则引发外键不存在的异常。

    最后一步执行insert操作。

    看了之后就忘,不如记录下来。其中有不正确的欢迎指正。

  • 相关阅读:
    Google 嘘! 嘘!
    zabbix fast
    zabbix
    kernel update
    列表推导
    Ddos 反射性防护 simple
    file cycle
    Scala
    Hadoop
    数据库
  • 原文地址:https://www.cnblogs.com/yingtaowz/p/2956250.html
Copyright © 2020-2023  润新知