Insert、Update和Delete
SQLServer里3个写操作是INSERT、UPDATE和DELETE(IUD)。如果加上约束、触发器和外键,写操作可以变得更复杂。这里仅关心基本的写操作。对于3个操作中的每一个,对于堆表和有聚集索引的表来说都有不同的图标,如图2-31、2-32和2-33所示。
图2-31.堆表和有聚集索引的表的Insert执行计划
图2-32.堆表和有聚集索引的表的Update执行计划
图2-33.堆表和有聚集索引的表的Delete执行计划
图2-34显示了表插入的成本计划,图2-35显示了聚集索引插入的成本细节。图2-36和图2-37显示了表更新和聚集索引更新的成本细节。图2-38和图2-39显示了表删除和聚集索引删除的成本细节。
即使在表(堆)和聚集索引操作上的更新和删除操作有些不同,但成本几乎是一样的。索引搜索操作和在堆表里的表更新操作是分开的,但对聚集索引来说就是其中的一部分了。
图2-34.表插入成本细节
图2-35.聚集索引插入成本细节
图2-36.表更新成本细节
图2-37.聚集索引更新成本细节
图2-38.表删除成本细节
图2-39.聚集索引删除成本细节
插入的I/O成本看来主要依靠表里目前的行数,如图C-1显示。插入的I/O成本对于每页320行和每页99行是相同的,而每页95行最高。然后I/O成本的差异少于0.7%。I/O成本相对于行的改变要在SQLServer停止重启后才能观察。这个改变在其他环境下是否能观察到还是个未知数。
图C-1.插入的I/O成本相对于目前表里的行的变化
插入的I/O成本更少的依赖于每页的行数,表是否有聚集索引是一个非常微小的因素。图C-2显示了显示了与每页的行数的依赖关系。在表有无聚集索引之间的I/O成本的差异在第5个小数位。
图C-2.插入的I/O成本
更新操作可能是更新或插入或删除操作,依赖于被修改的列是固定列还是可变长列和是否有足够的空间来存储新的可变长数据。
有时候需要插入几行到表里(不是来源于其他源)。通常的选择是分别写几个独立的Insert语句,这样每个语句会导致高的I/O成本(0.010021)。
INSERT N1C(ID,Value) VALUES (321,'TYI539087J')
INSERT NIC(ID,Value) VALUES (322,'TYI539087J')
一个可选的方法是使用union操作符把数据形成一个单个的行集,如下所示:
INSERT N1C(ID,Value)
SELECT 321,'TYI539087J'
UNION ALL
SELECT 322,'TYI539087J'
用UNION ALL子句的Insert语句的执行计划如下:
图2-40.使用UNION ALL操作符插入2行
在上面的例子里,常量扫描(Constant Scan)、串联(Concatenation)和Top操作符增加很小的成本(仅仅CPU),但插入的I/O成本只有一次。
Constant Scan CPU Cost = 0.000001157 per row
Concatenation CPU Cost = 0.000000100 per row
Top CPU Cost = 0.000000100 per row
还有其他操作符如并行操作选项。如果时间允许的话再做讨论。
执行计划成本综述
执行计划成本规则的以下几点值得注意:
- 索引搜索成本不依赖于索引深度
- 书签查找成本不依赖于表类型(堆表还是有聚集索引的表)
- 索引搜索和书签查找的I/O成本依赖于平台,其他成本不是
- 锁暗示(行锁、页锁、表锁)不影响成本规则
- 在索引搜索和连接操作里增加行的每行成本通常比最初的行的成本低。
这几点适合于SQLServer查询优化器用来决定最优的执行计划的成本规则。SQLServer文档没有地方宣称有所有影响查询成本的执行计划成本规则的因素。成本规则是否基于实际的测量或者代码路径长度估计的一些形式也是没有阐明的。
理想地,成本规则应该尽可能的准确以便查询优化器能做出最好的执行计划的决定。由于我们还不知道这些成本规则和实际的测量值是怎样比较的,所以此时还不能从真实的查询成本里得到更好的结论。
此时可以做出一个结论。有时候需要用测试数据评估数据库应用程序,而不是用生产环境下的数据。为了为产品数据库观察可能的查询执行计划,仅需要用正确的分布数据来产生填充测试数据库。不必填充整个预期的产品环境的大小。例如,在一个订单数据库里,如果典型的客户在Orders表里有10条记录且每笔订单在Order_Line表里也有10条记录,那么用那种分布填充一些测试客户可以生成除书签查找和表扫描的预期的执行计划。
相关推荐
### 剖析SQL Server执行计划 #### 一、引言与概述 SQL Server执行计划是数据库管理系统在处理查询请求时所采用的一系列步骤和技术的集合。这些计划旨在优化查询性能,确保数据能够以最高效的方式被检索。本书《SQL...
SQL Server 执行计划详解 SQL Server 的执行计划是数据库优化的关键步骤。通过查看执行计划,可以了解数据库的查询过程,从而进行优化和改进。本文将通过一个实践示例,介绍如何查看 SQL Server 的执行计划,并解释...
### SQLServer2000至MySQL5数据库迁移详解 #### 一、迁移背景与目标 在信息技术快速发展的今天,企业可能会因为各种原因需要将现有的SQL Server 2000数据库迁移到MySQL 5环境中。这样的迁移不仅可以降低维护成本,...
### 解剖SQL Server执行计划 #### 一、执行计划概览 在深入探讨SQL Server执行计划之前,我们首先需要理解什么是执行计划以及它为何如此重要。执行计划是SQL Server优化器为查询选择的最佳运行策略。当数据库...
### SQL Server执行计划详解 #### 一、引言 在数据库管理与优化的过程中,了解SQL Server执行计划至关重要。本文将详细介绍SQL Server执行计划的基本概念、如何捕获执行计划、解读执行计划以及如何利用这些信息来...
在SQL Server中,执行计划缓存是一个至关重要的性能优化机制,它减少了编译查询计划所需的资源,提高了系统整体的响应速度。本文将深入探讨执行计划缓存的工作原理、为何需要缓存以及它所缓存的对象类型。 首先,...
书中会详细介绍SQL Server 2000的备份策略,包括完整备份、差异备份和事务日志备份,并教授如何执行恢复操作以应对数据丢失或系统故障。 此外,性能调优是提升系统效率的重要手段。本书会探讨SQL Server 2000的性能...
在SQL Server 2000这个经典版本中,数据库管理员和开发者经常面临性能优化的挑战。本篇将深入探讨SQL Server 2000过程优化的相关知识点,旨在帮助你提升数据库系统的运行效率。 1. **查询优化器**:SQL Server 2000...
5. **迁移计划**:考虑到SQL Server 2000已经停止支持,长期使用可能会带来风险。因此,考虑升级到更现代的版本,如SQL Server 2016或2019,是明智的选择。 总的来说,SQL Server 2000企业版精简版虽然小巧,但功能...
Sql Server 等待响应时间是指 Sql Server 数据库在执行查询或存储过程时,等待响应的时间。在 Sql Server 2000 中,可以通过设置 sp_configure 的 query wait 选项来调整等待响应时间。query wait 选项可以设定一个...
SQL Server 2000的查询优化器会自动选择最佳的执行计划,包括选择合适的索引。理解查询优化器的工作原理可以帮助我们更好地设计和使用索引。 总结,SQL Server 2000的索引优化是数据库性能调优的重要环节。通过对...
在不同的数据库系统中,如MySQL、Oracle、SQL Server等,都有相应的命令或工具用于查看SQL语句的执行计划,例如SQL Server的`SET SHOWPLAN_ALL`或`SET SHOWPLAN_TEXT`,Oracle的`EXPLAIN PLAN`。 4. **执行计划的...
以下是从标题“sqlserver2000优化(必须的)”和描述“sqlserver2000优化必看”中提取的关键知识点,这些知识点对于SQL Server 2000的高效运行至关重要。 ### 1. SQL Server 2000优化的重要性 SQL Server 2000作为...
5. **管理工具改进**:SQL Server 2000 SP3可能改进了企业管理器、查询分析器等管理工具的功能,提供更好的用户体验和更强大的管理能力。 6. **复制功能增强**:对于依赖SQL Server复制功能的应用,SP3可能包含了...
- 使用 SQL Server Profiler 工具来监控查询执行计划,并分析潜在的性能瓶颈。 - Query Analyzer 可以帮助识别那些消耗大量资源的查询,并给出优化建议。 6. **锁机制**: - 正确使用锁定机制可以避免并发访问时...
《SQLServer2000高级编程技术》这本书深入探讨了SQL Server 2000这一经典数据库管理系统中的高级编程技术。SQL Server 2000是微软公司推出的数据库平台,虽然现在已经有一些老旧,但其在许多企业中仍然占据着重要的...
"SQL Server数据库数据转MySQL工具"正是一款解决这一问题的专业软件,它允许用户方便地将SQL Server中的数据转换到MySQL环境中。 SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业...
例如,`GrantFritchey_SQLServerExecutionPlans_Code`这个文件很可能包含的是一个关于如何理解和解析SQL Server执行计划的代码示例。Grant Fritchey是一位知名的SQL Server专家,他的工作可能涉及深入探讨执行计划中...