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操作。

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

  • 相关阅读:
    WinForm 清空界面控件值的小技巧
    MVC 图片上传总是request.files.count() 等于0
    LinqToSQL 左连接右连接内链接
    C# utc datetime 互相转化
    mvc javascript form.submit()
    Java API中文版下载
    jQuery的链式操作
    【转】Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法
    servlet什么时候被实例化?
    Jquery总结 $("h3 a", patch);
  • 原文地址:https://www.cnblogs.com/yingtaowz/p/2956250.html
Copyright © 2011-2022 走看看