zoukankan      html  css  js  c++  java
  • 执行计划之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操作。

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

  • 相关阅读:
    操作系统的内存对齐机制学习笔记
    函数库调用和系统调用的区别
    操作系统与c语言
    技术开发人员适应其他部门提需求的一个经验
    受益技术类书籍
    软件项目发展历史<人月神话>这本书好
    好的代码风格积累
    演示内存碎片原理的好图
    不要的代码删除掉,而不是放到系统中干扰
    编译安装php-amq扩展
  • 原文地址:https://www.cnblogs.com/yingtaowz/p/2956250.html
Copyright © 2011-2022 走看看