`

Sql server Insert执行的秘密(下) 带外键的INSERT分析

阅读更多

上一篇文章介绍了一个最简单INSERT语句的执行计划详细情况,这一篇分析一下带外键表的INSERT的例子。
 
本文所用的数据表结构如上图所示;其中Blog表上BlogID是自增的主键,并在CreateUserID和CreateTime列上分别建有两个非唯一索引。

我们要往Blog表中插入一条数据,并分析其执行情况。
INSERT 语句如下:

INSERT INTO [DB_Cn].[dbo].[Blog]
           ([Title]
           ,[Tags]
           ,[Content]
           ,[CreateUserID]
           ,[CreateTime]
           ,[IP])
     VALUES
           ('这是一个测试博客标题'
           ,'测试'
           ,'这是测试博客的内容,博主的地址是http://www.cnblogs.com/yukaizhao/'
           ,100
           ,'2010-01-06'
           ,'127.0.0.1');

 

 

其执行计划要稍微复杂一些,如下所示
 图片很大请在新窗口打开查看

从右向左分析,第一步中的常量扫描是根据用户输入的sql语句生成一个数据行;第一个常量扫描生成了一个新的自增长id;第二个计算标量则是计算用户输入的sql语句中的常量值,这些在上一篇文章中有详细的叙述,请参考上文
第四步是分叉的两步操作,上面的操作是聚集索引插入,下一步的操作是对User表的聚集索引查找,如下图是聚集索引插入的详细情况:
 
逻辑索引插入的部分估计开销为90%,这一步插入Blog表的主键,Blog表的两个索引IX_Blog和IX_Blog_CreateTime,对这两个索引的操作说明了在表中建索引会对表的插入操作效率产生负面影响;由于Blog表的CreateUserID字段是个外键,所以这一步还有一个输出列表输出了CreateUserID字段;这个字段要用来做外键是否存在的判断。

我们再看下对User表的聚集索引查找操作的详细情况:
 
这步中查找的对象是PK_User及User表的主键,主键的扫描是非常迅速的,尽管如此当User表非常大时,扫描的开销也是非常可观的。这里扫描的开销可以分为两个部分,一部分是cpu的开销,另外一个方面是扫描时sql server会自动给主键加上一个共享锁,既然加锁就有可能会造成死锁或排他锁的等待。

从这一步看如果我们对响应速度的要求远大于对数据一致性的要求时,可以考虑删掉外键,去掉这一步不必要的开销。

第五步:对第四步两个分叉操作产生的输出进行嵌套循环,这一步嵌套循环是为下一步的Assert做准备
第六部:Assert判断嵌套循环产生的CreateUserID是否为NULL,如果为NULL则会引发外键不存在的异常
最后一步执行INSERT操作。

从以上分析可以得出几点心得
1. 为什么使用自增长字段,在插入数据失败时自增长字段的编号会被占用?
因为自增长字段的值是在第二部计算标量是产生的,这一步已经将自增id加1了

2. 为什么给表建的索引多了会影响插入的性能
因为每一次插入都需要对每一个索引进行插入

3. 为什么在做大并发设计时,会不建外键,或将外键删除掉
因为外键会带来额外的cpu开销和锁资源的开销

3
2
分享到:
评论

相关推荐

    sql server 生成 insert 脚本 工具

    SQL Server生成INSERT脚本工具是一种实用程序,它能够帮助数据库管理员和开发人员高效地从现有的SQL Server数据库中自动生成插入语句(INSERT scripts),这些语句可以用于在其他数据库或备份环境中重现数据。...

    SQL SERVER的insert功能

    SQL Server的`INSERT`功能是数据库管理中一个基础且至关重要的操作,用于向数据库表中添加新的数据行。当我们需要将一张表的数据从一个数据库移动到另一个数据库,或者在不同的环境间同步数据时,`SELECT...INTO`或...

    SQL Server 2005的各种限制,table可容纳列数

    SQL Server 2005 的限制详解 SQL Server 2005 是一个功能强大且流行的关系数据库管理系统,它具有许多限制,这些限制是为了确保数据库的稳定性、安全性和性能。在本文中,我们将详细介绍 SQL Server 2005 的各种...

    sql server 应用与开发教程

    SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),在企业级数据存储、管理和分析中扮演着重要角色。本教程旨在帮助初学者掌握SQL Server的基本概念、操作和开发技巧,使其能够轻松入门。 一、SQL ...

    SQL SERVER项目案例(sql代码)

    触发器则在特定的数据操作(如INSERT、UPDATE、DELETE)前后自动执行,用于实现数据的自动维护。 4. **视图与索引**:视图是虚拟表,用于简化复杂查询,提供安全访问。索引则是加速查询的关键,包括聚集索引和非...

    SQLServer_课件

    课程将涵盖ER模型、范式理论(1NF、2NF、3NF等),以及如何在SQL Server中创建和管理表,包括数据类型的选择、主键和外键的设定、索引的使用等。 四、安全性与权限管理 SQL Server提供了全面的安全机制,包括用户...

    SQL server自带的Northwind 和pubs示例数据库

    在SQL Server安装目录下的"data"子目录中,你可以找到Northwind和Pubs的.mdf文件,这是SQL Server的数据文件格式。要将这些示例数据库添加到你的实例中,你需要执行几个步骤: 1. 打开SQL Server Management Studio...

    sqlserver 2005 express X64

    SQL Server 2005 Express Edition 是微软推出的一款轻量级数据库管理系统,特别适用于小型企业和个人开发者。在64位(X64)系统上安装SQL Server 2005 Express,可以充分利用更大的内存和处理器资源,从而提高数据...

    SQL SERVER 数据自动生成SQL语句

    在提供的压缩包文件中,`SQLGernate.exe`很可能就是这样一个工具,它执行上述过程,根据用户选择的SQL Server数据库生成相应的SQL脚本。`xlpos.ini`可能是一个配置文件,包含程序的设置信息或者用户的个性化配置,...

    SQLServer数据库表中数据导出成SQL语句工具

    数据和结构的SQL语句会被清晰地呈现,用户可以选择性地复制粘贴到新的SQL Server环境中执行,从而实现数据的导入。 5. **安全性与最佳实践**:在使用这类工具时,应注意数据敏感性和安全问题。确保只导出需要的数据...

    基于sql server 2005学习sql

    SQL Server 2005是微软推出的数据库管理系统,它包含了多种组件和服务,如数据库引擎、Analysis Services(分析服务)、Integration Services(集成服务)、Reporting Services(报表服务)等,旨在为企业提供数据...

    SQL server大作业

    在本“SQL Server大作业”中,我们主要探讨的是如何使用SQL Server进行数据库的设计与实现。这个作业可能包括了从需求分析、概念模型设计、逻辑结构设计到物理结构设计的全过程,同时也涉及到SQL语言的使用,如数据...

    SQL server 电子教案

    SQL Server 是一款由微软公司开发的关系型数据库管理系统(RDBMS),它在IT行业中被广泛应用于数据存储、处理和分析。这份"SQL Server 电子教案"涵盖了关于SQL Server的多种重要知识点,旨在帮助学习者掌握这个强大...

    SQL Server 2000 应用系统开发教程 +ppt +源码

    4. **VB与SQL Server交互**:通过ADO(ActiveX Data Objects)或.NET Framework中的SqlClient Provider,学习如何在VB程序中连接SQL Server,执行SQL命令,处理结果集,以及事务控制。 5. **VB编程基础**:复习VB的...

    SQL_INSERT_INTO_语句

    同时,如果插入的数据违反了表的约束(如主键约束、唯一性约束或外键约束),SQL服务器也会拒绝执行该操作。 总之,SQL_INSERT_INTO_语句是数据库操作中的基础元素,对于数据库的增、删、改、查四大功能,它是实现...

    SQL Server 从入门到精通(第2版)实例代码,实例源程序

    11. **性能优化**:监控和分析SQL Server性能是DBA的重要任务,使用查询分析器、动态管理视图和性能计数器来找出性能瓶颈,并采取相应的调整措施,如索引优化、查询改写等。 12. **集成服务和 Reporting Services**...

    sql server开发教程,让你快速学会sql server

    SQL Server提供多种高可用性解决方案,如镜像、复制、Always On 可用性组等,确保在硬件故障或灾难情况下,数据仍可正常访问。 本教程中的案例涵盖了以上所有方面,通过学习和实践,你将能熟练掌握SQL Server的使用...

    SQL SERVER2000实用教程 蒋文沛主编课件、实例代码及习题答案

    3. SQL Server 2000安装与配置:介绍如何在Windows环境下安装SQL Server 2000,以及服务器和客户端的配置。 4. 数据库管理:包括数据库的创建、修改、备份、恢复、性能优化等操作,以及安全性管理,如用户权限设置...

    sql server 2012 数据库技术及应用第四版

    SQL Server 2012是微软公司推出的一款强大的关系型数据库管理系统,被广泛应用于企业级数据存储、管理和分析。此数据库系统提供了丰富的功能,包括数据仓库、数据分析、数据挖掘以及高性能事务处理等,使得它在各类...

    Sql Server 电子教案

    SQL Server是Microsoft公司开发的一款广泛应用于企业级数据管理与分析的数据库系统,它提供了强大的数据存储、查询和分析功能。这份教案深入浅出地介绍了SQL语言的各个方面,使初学者能够快速上手,同时也为有经验的...

Global site tag (gtag.js) - Google Analytics