SQL Server 2000执行计划成本(2/5)

[转]SQL Server 2000执行计划成本(2/5)

聚合 

      查询里使用聚合函数(MIN、MAX、COUNT、AVG或SUM)时发生流聚合(Stream Aggregate)和标量计算(Compute Scalar)如下所示。 
SELECT COUNT(*), AVG(Value) FROM M2C_10 
      MIN和MAX函数要求流聚合操作。在执行计划里其他的函数要求流聚合后跟一个或多个标量计算操作。


 
 
图2-12.流聚合和标量计算的执行计划


 
图2-13.流聚合操作的成本细节


 
图2-14.标量计算操作的成本细节


      两个操作都列出每行的CPU为0.0000001(I/O成本为0),但似乎只有其中一个应该计入最后的成本。


连接 
      SQLServer里的连接操作主要有3种类型:嵌套循环(循环)、哈希和合并。嵌套循环连接经常出现在那些查询里每个表常常涉及到很少行的事务处理应用里。哈希和合并连接则经常出现在那些连接常常影响大量行的决策支持应用里。实际上有3种哈希连接。这儿研究的哈希连接是内存中的哈希连接,它的整个哈希表内存都装得下。其他两个哈希连接类型应用于那些可以内存装不下的非常大的数据结构。查询优化器决定哪个连接类型和连接顺序更有效。如果指定了连接类型(循环、哈希或合并),那么连接顺序也固定了。


嵌套循环连接 
      下面的查询显示了两表一个简单的连接。连接的执行计划可能包括索引搜索操作、书签查找或表扫描,依赖于指定的搜索参数和可用的索引。 

SELECT  M2C_01.ID, M2D_01.Value 
FROM  M2C_01  INNER   JOIN  M2D_01  ON  M2D_01.ID  =  M2C_01.ID2 
WHERE  M2C_01.GroupID  =   1  


      对于上面的查询,表M2C_01在列GroupID、ID2和ID(如果ID是聚集主键的一部分或全部则自动被包括了)上有一个覆盖索引,表M2D_01 在列ID上有一个聚集索引。循环连接执行计划如图2-14所示,涉及到的行很少索引计划成本最低。


 
图2-14.循环连接执行计划


      上面的执行计划里上表(M2C_01)是外部源(译者注:帮助文档里称为外部输入表),下表(M2D_01)是内部源(译者注:帮助文档里称为内部输入表)。上面嵌套循环连接的三个组件的成本细节显示在图2-15a、15b、15c里。循环连接计划首先取得外部源的行。对于外部源的每一行,从内部源里找到所有匹配的行。即使没有明确指定内部源表的搜索参数,在嵌套循环连接里连接条件自身可以作为搜索参数。在本例中,从外部源返回10行,成本细节显示估计行计数=10且估计执行数(estimated number of executes)=1。


 
图-15a.外部源索引搜索成本细节 
 
图-15b.内部源索引搜索成本细节 
 
图-15c.循环连接成本细节


      外部源的每一行正好匹配内部源的每一行。内部源索引搜索操作的成本细节显示估计行计数为1且估计执行数为9.919(实际是10)。嵌套循环/内部连接成本细节显示估计行计数为9但Set 选项SHOWPLAN_ALL显示是9.92。显示的成本细节低而不是四舍五入到最接近的值。注意循环连接细节里的Argument(参数)是OUTER REFERENCES。它的重要性稍后讨论。 
      当外部源是索引搜索操作时(不是书签查找),该组件的成本仅是前面讨论的索引搜索操作成本。但带参数条件OUT REFERENCES的循环连接构成的操作的I/O成本为0,CPU成本规则如下: 

Loop  join  CPU Cost  =   0.00000418  per row 

      内部源表的成本细节显示为单行索引搜索的I/O和CPU成本(0.0063285和0.0000796),但是整个操作的成本(执行了9.919次)是0.00768413。执行数(number of executes)的成本规则不是简单的I/O和CPU成本的和再乘以执行数的值。 
事实上,行计数对于循环连接的内部源而言有3种不同的成本,通过下面2个表的连接操作的3个查询可以模拟。(第4种情况缠绕操作将在以后解释。)循环连接要明确指定连接顺序,第一个表作为外部源,第二个表作为内部源。对于所有的情形,外部源表有一个覆盖索引用GroupID跟在连接列的后面。 

-- 情形1 
SELECT  M2C_01.ID, N1C_01.Value 
FROM  M2C_01  INNER  LOOP  JOIN  N1C_01  ON  N1C_01.ID  =  M2C_01.ID6 
WHERE  M2C_01.GroupID  =   @Group1  
-- 情形2 
SELECT  M2C_01.ID, M2D_01.Value 
FROM  M2C_01  INNER  LOOP  JOIN  M2D_01  ON  M2D_01.ID  =  M2C_01.ID2 
WHERE  M2C_01.GroupID  =   @Group1  
-- 情形3 
SELECT  M2C_01.ID, M2D_01.Value 
FROM  M2C_01  INNER  LOOP  JOIN  M2D_01  ON  M2D_01.ID  =  M2C_01.ID2 
WHERE  M2C_01.GroupID  =   @Group1   AND  M2D_01.GroupID  =   @Group2  


      情形1和情形2没有逻辑区别。区别仅在内部源表的大小上。情形1中,表N1C_01很小,更明确的说单个8K的页能存下。情形2中,表M2D_01不小,有50000行506页。外部源表M2C_1正好也是50000行,但这不影响成本结构。情形1和情形2连接都为内部源使用聚集索引上的索引搜索操作。情形3和情形2有相同的表。不同的是情形3为内部源表明确指定了搜索参数。这允许内部源的索引搜索使用在连接列后跟GroupID上的覆盖索引。 
现在来考虑循环连接的本质。对于外部源的每一行,在内部源里找到匹配的行。不能保证外部源里的连续行会匹配内部源里的连续行。例如,外部源的第一行连接列的值也许是1,接下来的行可能的值是2或50000。外部源的每一行都要求一个完整的索引搜索操作来定位匹配内部源里的记录。唯一确定的协同作用是为内部源表使用的索引的根级已被找到。 
      图2-16显示了上面的例子里情形1、2和3循环查询的执行计划的常规成本。术语常规成本是除以单行索引搜索成本(1P/2P系统为0.0064081)后的成本。4P系统成本实质上有相同的成本结构,除了索引搜索基本成本大概是1P/2P系统的一半外。3种情形都有相同的外部源索引搜索和循环连接构成的成本,所以区别完全是由于内部源索引搜索成本引起。


 
图2-16. 循环连接成本与参与的行


      在情形1里,内部源表单个页就能装下,所以内部源的执行计划仅仅为外部源的每一行重复读取一个叶页即可。情形1的内部源成本规则相当接近下面: 
      情形1 Inner Source Cost = 0.0063285 + 0.0000796 per execute 
      情形2里,内部源表不小。成本规则适当的低于执行数,如下: 
      情形2 I.S. Cost = 0.0063285 + 0.000140-0.000154 per execute 
      对于有大量的行参与的情况,成本规则急剧地偏离上面的等式。在情形3里,内部源表不小,但覆盖索引把需要的行从内部源里隔离到一个限制的范围了。情形3的内部源成本规则等同于有少量行参与的情形2,但不会骤然增加100到200行。 
      图2-17显示了上面讨论的3个循环连接每行的不同的常规成本。在300行使每行的不同成本是通过在300行连接和100行连接之间不同的成本除以200行里不同的成本计算得到的。


 
图2-17. 循环连接每行的不同成本


      情形1的查询非常接近上面描述的成本规则(在内部源表里每增加一个执行的成本为0.0000796)。情形2和3的查询在内部源里有很少行参与时的成本规则大约为每行0.00015。有时在100和200行之间,情形2的内部源成本波动很剧烈。最后,在有大量行参与时(大约1000~2000行的情形),所有情形增加的成本是内部源上每个执行为0.0000796。情形3成本结构逐渐从情形2范围减少到情形1的范围。在少数情况下,明确指定SARG(搜索参数)的唯一好处可能是情形3的双倍效果。 
      上面的计划成本图形是一对一的连接,外部源的每一行正好和内部源的一行连接。当外部源的每一行连接到内部源的多行时,内部源上增加的CPU成本(称为每执行成本)为: I.S. CPU Cost 0.0000011 per additional row 如果外部源的每一行匹配内部源里大量的行,则每增加一个叶页的成本大概为0.00074074,但该情形测试不了。循环连接组成的成本(每行0.00000418)适用于连接的所有行。 
循环连接可以为内部源和外部源的其中一个或二者都使用书签查找操作。图2-18里的第一个执行计划就是在外部源发生连接操作之前进行书签查找操作。第二个计划显示了内部源连接之后的书签查找操作。书签查找可以在连接操作之前或之后。书签查找的成本似乎依循前面所讲的规则,但这并没有得到广泛的论证。偶尔也能看到成本异常。外部源也可能是表扫描操作。大可不必在循环连接的内部源上进行表扫描,因为这会让外部源的每一条目都执行一次。


 
 
图2-18.带书签查找的循环连接


      循环连接成本结构总结如下:外部源的成本构成按照早前来自索引搜索和书签查找(如需要的话)或表扫描的规则。内部源更复杂些。如果没有明确指定搜索参数,那么或多或少和增加的每行成本有关。循环连接构成的操作自身相当简单,仅有每行的CPU成本。 
      如果仅为一个表指定搜索参数,那么作为外部源的表可以避免高成本开销的表扫描。内部源表连接列上的索引在循环连接里是有用的。如果为内部源表指定搜索参数,那么在连接列后跟搜索参数上的索引在中间行的范围内通常不会有高的每行成本。其他可能影响连接顺序的因素是每个表参与的行数。循环连接每行成本结构主张讲很少行的表作为外部源。

 

Tag标签:  SQLServer2000

 

SQL Server 2000个人版的安装 一.本文在windows环境下SQL2000的安装过程。1.系统需求    Microsoft SQL Server 2000 可在运行 Intel或兼容的 Pentium、Pentium Pro 或 Pentium II 处理器的计算机上运作。处理器必须以最低 166 MHz 的速度运行。需要 Internet Explorer 5.0 或更高版本。另外在在内存方面有如下要求:    企业版     最低 64 MB,推荐使用 128 MB    标准版     最低 64 MB    个人版     在 阅读详情

相关推荐

sql server2000客户端连接服务器

远程连接SQL SERVER 2000服务器方法 ZDNet软件频道 时间:2008-09-22 作者:ZDNET软件频道 | ZDNET软件频道 我要评论() 本文关键词:企业管理器 TCP/IP 服务器 SQL Server 2000 SQL Server http://soft.zdnet.com.cn/software_zone/2008/0922/1144458.s

草长莺飞 1345

[转]SQL Server 2000执行计划成本(2/5)

聚合       查询里使用聚合函数(MIN、MAX、COUNT、AVG或SUM)时发生流聚合(Stream Aggregate)和标量计算(Compute Scalar)如下所示。 SELECT COUNT(*), AVG(Value) FROM M2C_10       MIN和MAX函数要求流聚合操作。在执行计划里其他的函数要求流聚合后跟一个或多个标量计算操作。 ...

weixin_33733810的博客 131

掌握SQL Server 2000 JDBC驱动的三个关键jar包

Java Database Connectivity (JDBC) 是一个Java API,允许Java程序执行SQL语句。JDBC驱动程序是连接Java应用程序和数据库之间的一个桥梁。它负责把Java的调用转换为特定数据库能理解的命令,反之亦然。JDBC驱动程序将应用程序与底层数据库管理系统的实现细节分离开来,因此应用程序可以跨多种数据库系统工作。JDBC(Java Database Connectivity)驱动程序充当Java应用程序与数据库之间的桥梁。

weixin_34620658的博客 1113

SQL Server的执行计划(Execution Plans)

为了能够执行查询,SQL Server 数据库引擎必须分析该语句,以确定访问所需数据的最有效方法。此分析由称为查询优化器的组件处理。查询优化器的输入由查询、数据库架构(表和索引定义)和数据库统计信息组成。查询优化器的输出是查询执行计划,有时称为查询计划或执行计划。

Lion_Long的博客 5447

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1549

【树莓派4B】八、树莓派软路由,Ubuntu18.04配置路由转发

我的目的是通过把树莓派做成一个软路由,相当于一个智能路由器。 材料 树莓派4B,操作系统其实可以是其他的Linux版本。以为4B自带无线网卡,就用自带无线网卡作为路由出口。 大概思路 具体步骤 配置两个网卡的IP sudo vim /etc/network/interface 这里设置静态IP,也可以动态获取。 #Local loopback auto lo iface lo inet loopback #Ethernet0 auto eth0 iface eth0 inet static addr

林愿留的博客 10万+

MySQL_15_MySQL底层SQL查询成本计算

文章目录一、前言二、select count(*) 和 select count(1)针对无 where_clause子句 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,达到性能最高理论:SQL 选用索引的执行成本如何计算(全文重点,面试考点)实践:SQL 选用索引的执行成本如何计算(全文重点,面试考点)继续深入,MySQL 做全表扫描的成本有多少,SHOW TABLE STATUS LIKE 'person' 构造全表扫描optimizer_trace 工具,计算索

毛毛的专栏 1082

RV1126上YOLOv8部署实战:从模型转换到板端推理的完整避坑指南

本文提供了在瑞芯微RV1126芯片上部署YOLOv8目标识别算法的完整实战指南。内容涵盖从模型转换、环境搭建到板端推理代码编写的全流程,重点解析了RKNN-Toolkit使用、量化配置、内存优化及后处理实现等关键环节的常见问题与解决方案,旨在帮助开发者高效避坑,实现边缘AI应用的稳定落地。

pz89012345的博客 568

MySQL 优化之执行SQL成本

EXPLAIN 升级版 EXPLAIN FORMAT=JSON SQL 一、demo 表介绍 CREATE TABLE IF NOT EXISTS {TABLE_NAME} ( `id` varchar(32) NOT NULL, `time_recorded` datetime(0) NOT NULL, `time_updated` datetime(0) NOT NULL, `key1_column` int(11) NULL, `key2_column` int(11) NOT

哆啦A梦丶幻想的博客 733

基于CrossSim的存储硬件原型机ANN仿真:MNIST手写数字识别实现与分析

本项目基于CrossSim仿真平台,在存储硬件原型机上实现了MNIST手写数字识别的ANN模型。通过搭建CrossSim仿真环境,设计传统ANN基准模型和考虑硬件非理想特性的CrossSim模型,对比分析了不同配置下的识别性能。实验结果表明,在引入硬件噪声和器件变异的情况下,模型准确率仍能达到95%以上,验证了存储内计算架构的可行性。研究为存储硬件与计算单元融合提供了实验依据,展示了CrossSim在神经形态计算系统仿真中的实用价值。

huanghm88的专栏 596

C++幂运算全解析:std::pow()函数详解与实战指南

本文详细介绍了C++标准库中的std::pow()函数,包括其基本用法、数学定义和多种重载形式。重点分析了该函数在科学计算、图形处理等领域的实际应用,并提供了性能优化方案如快速幂算法和预计算表。文章还探讨了精度控制、错误处理等关键问题,最后通过一个完整计算器实现展示了综合应用。std::pow()作为基础数学函数,合理使用能显著提升计算效率和代码可靠性。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 340

[转]看懂SqlServer查询计划

本文转自:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-MSDN文章 对于SQL Server的优化来说,优化查询可...

weixin_33785108的博客 801

Sigrity Power DC Single-BoardPackage IR Drop Analysis模式进行单板压降仿真分析操作指导

如果需要单独对某个via设置参数,右侧选择Setup by padstack,下方下拉选择某个via,单独设置参数即可。举例:板厚1.6mm,内层1OZ(1.2mil,即0.03mm),铜皮宽度1mm,20度温升,允许通流I为2.5A。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。电流密度计算公式:J=I/A(J为电流密度,I为电流,A为横截面积)

weixin_54787054的博客 698

SQL Server2000安装教程

GPS平台、网站建设、软件开发、系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=1655 安装步骤: 如何在64位操作系统上安装sql2000 2019年8月9日,在windows server 2003 64位的电脑上安装成功 edit by sand   要在 64 位操作系统上安装此应用程序,请使用以下步骤:   在sql2000安装盘CD1中打开STANDARD文

森大科技的博客 1万+

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2729

VTK-9.5.0 1D2D3DWidget实现灰度图+深度图+3D点云显示(可轻松集成到自己的项目)

VTK1D2D3DWidget是一个基于Qt和VTK开发的3D点云可视化工具,支持RGB和深度点云数据的显示与处理。主要功能包括点云加载、可视化、保存为PLY格式文件,以及背景颜色、点间隔、坐标轴显示等参数的自定义设置。该工具采用模块化设计,核心组件包括主窗口管理类、VTK渲染组件和自定义鼠标交互样式,依赖Qt5+和VTK9.5.0库实现跨平台支持。项目提供完整的源码和构建指南,适用于点云数据的快速展示与分析。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 386

SQL Server 2000执行计划成本(1/5)

[转]SQL Server 2000执行计划成本(1/5) 表扫描       当没有合适的索引时就发生表扫描操作。这可能意味着没有索引存在或者预期有很多行且比扫描整个表开销更少。如果表是一个堆表,执行计划显示表扫描操作;如果表有聚集索引或者所有需要的值都在一个非聚集索引里如图2-6显示,那么执行计划显示一个索引扫描操作。  图2-6.表扫描的执行计划和聚集索引扫描操作       图2-7...

mlxia的专栏 191

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Microsoft SQL Server 2000综合应用(1)——SQL 2000的概述以及安装

《Microsoft SQL Server 2000综合应用》这一系列文章主要写给可亲可爱的GGT老师,希望她可以安心上讲台,然后把本系列的文章传授出来。SQL Server是Micrcoft公司在原来和Sybase公司合作的基础上打包出的一款面向高端的数据库系统。自它推出后,迅速占领了的数据库应用市场。经过不断的更新换代,它已发展到了SQL Server 2000, 它具有高性能、功能强、安全性

薛敬明的专栏 3152

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SQL Server 2000安装图解

版本区别 SQL Server 2000有四个版本:企业版/标准版/个人版/开发版企业版和标准版需要安装在服务器操作系统上,如Windows NT Server/Windows 2000 Server/Windows 2003 Server等个人版可以安装在个人版的操作系统上,如Windows98/Windows 2000 Professional/Windows XP Home/Windows...

xxsh673076773的专栏 298

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SQL Server 2000 的各版本

SQL Server 2000 分为以下版本:(1)       Enterprise Edition该版本是各个版本功能最完整、最强大的一个,对并发用户的个数理论上没有限制,数据库的容量可以达到 1048516TB(1TB=1024GB),支持最多32个CPU,64GB内存,适合作为大的WEB站点服务器,以及企业级在线事务处理和数据仓库系统的服务器。(2)       Standard Edition该版本在并发处理以及支持的CPU个数(4)、内存容量(2GB)方面都比企业版差一些,在线分析方面也没有企业

wang19800105的专栏 4136

SQL SERVER2000的安装

     SQL SERVER2000的安装:    1  SQL SERVER2000各版本的运行环境: 企业版 : 操作系统要求Windows NT Server 4.0、NT Server 4.0 企业版、Windows 2000 Server、Windows 2000 Advanced Server 和 Windows 2000 Data Center

冰灯咖啡屋 2735

Hibernate 连接sql server2000 配置

1.先将sql server2000打好补丁 SP3 和 SP4 怎么查看SQL SERVER 2000是否打过SP4的补丁: 其实只要查询版本号就知道。 在查询分析器中输入 select @@version 或者输入 print @@version 如果是安装过SP4的补丁。应该是下面的信息: Microsoft SQL Server 2000 - 8.00.

shi553210541的专栏 2906

SQL Server 2000 基础(1)——安装

一、SQL SERVER 2000安装时常见问题1、配置服务器时中断;2、注册ActiveX 时中断;3、显示到%的时候中断;4、提示:command line option syntax error, type command /? for help,继续安装,最后在配置服务器的时候出现:无法找到动态链接SQLUNIRL.DLL于指定的路径……5、以前进行的程序创建了挂起的文

张骞 1673

[转]SQL Server 2000执行计划成本(5/5)

[转]SQL Server 2000执行计划成本(5/5) Insert、Update和Delete       SQLServer里3个写操作是INSERT、UPDATE和DELETE(IUD)。如果加上约束、触发器和外键,写操作可以变得更复杂。这里仅关心基本的写操作。对于3个操作中的每一个,对于堆表和有聚集索引的表来说都有不同的图标,如图2-31、2-32和2-33所示。 图2-31.堆...

mlxia的专栏 159

访问远程数据库(SQL SERVER 2000)

怎样实现访问远程数据库的问题【非局域网内】楼主leavealone77(出来混,迟早都是要还的)2004-11-24 11:23:40 在 MS-SQL Server / 基础类 提问访问远程数据库(SQL   SERVER   2000)     说详细点就是:     本机在武汉,要访问的服务器在广州(都可联上INTERNET)     现知道广州服务器所在机子的域名(IP地址)  

JiangRB的专栏 6349
上一篇: 定尾法!中豆子的几率高达95%,信不信自己去试试。
下一篇: 请问在一个查询里表连接的顺序对查询的性能是否有影响?
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值