`

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

阅读更多

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

哈希连接 
      哈希和合并连接都是分开处理内部源和外部源的。连接条件不能用作搜索参数。当没有为表或存在的不合适的索引明确指定搜索参数时,就要对那个表进行扫描。有可能哈希和合并连接有书签查找操作,但也未必,除非强制指定连接类型。 
下面的查询明确声明一个哈希连接。连接操作里的每一个表指定了搜索条件,并且两个表都有聚集索引或覆盖索引。

SELECT m.ID, n.Value 
FROM M2C m INNER HASH JOIN M2D n ON n.ID = m.ID 
WHERE m.GroupID = @Group1 AND n.GroupID = @Group2 

      图2-19里的执行计划由每个源上的索引搜索操作加上哈希连接共计3部分组成。哈希连接的成本细节在图2-20里显示。


 
图2-19.哈希连接执行计划


 
图2-20.哈希连接成本细节


      哈希和合并连接对于内部源和外部源的成本结构按照前面描述的索引搜索或表扫描操作的规则。外部源和内部源操作都在所有行参与的单个执行里处理,不象循环连接的内部源是根据外部源的每行执行一次。哈希连接组成的操作的成本结构大致按照下面的规则: 

CPU Cost = ~0.017770 + ~0.00001881 per row, 1-to-1 join 
        
+ 0.00000523 to 0.000000531 per additional row in IS 

      第一行适合于一对一的连接。第二行适合于外部源的每一行连接到内部源多行的情形。每行成本结构也适合由少量行的表作为外部源的情形。上面的哈希连接的总成本为以下几个的和:外部源索引搜索,内部源索引搜索和哈希连接。


合并连接 
      合并连接的细节在SQLServer文档和其他地方有过讨论。有两种类型的合并连接:一对多(包括一对一)和多对多合并连接。两种类型的合并连接都要求每个表里的行排序。一对多连接是更简单更有效的操作。一对多合并连接另外的要求关键是外部源的行必须在连接列上是唯一的。外部源的每一行可以连接内部源的任意多行,但内部源的每一行不能连接外部源的多行。多对多合并连接没有要求这个条件但它是更复杂的操作。 
下面的查询特别指定一个合并连接,它将强迫连接排序。外部源(M2C)在列GroupID和ID上有覆盖索引。外部源的连接列是ID字段,它是主键,所以适合一对多的合并连接条件。两个表都明确指定了一个搜索参数允许外部源和内部源上执行索引搜索操作代替表扫描。两个表都有聚集索引或覆盖索引,所以不要求书签查找操作。 

SELECT m.ID, n.Value 
FROM M2C m INNER MERGE JOIN M2D n ON n.ID = m.ID 
WHERE m.GroupID = @Group1 AND n.GroupID = @Group2 

      合并连接执行计划显示在图2-21里。图2-22显示了合并连接细节。注意最下面的参数(argument)条目是MERGE。该合并连接的成本结构有三部分操作组成:两个索引搜索操作(一个为外部源另一个为内部源)和合并连接操作。索引搜索操作的成本结构已经了解了。


 
图2-21.合并连接执行计划


 
图2-22.合并连接成本细节


      合并连接的成本结构基本上如下: 

CPU Cost = ~0.0056046 + ~0.00000446 per row, one-to-one 

      成本规则对于某些个案有少量的不同。对于一对多连接,内部源每增加一行的成本是: 

CPU Cost 0.000002370 per additional inner source row 

      对于所以类型的连接,成本结构适合外部源表提供少量行而内部源表提供更多的行的情形。


多对多合并连接 
      在下面的查询里,外部源的连接列是ID2,它不是主键,也没有唯一索引。即使其他表的连接列是唯一的,明确的合并连接会强制指定的连接顺序,使第一个表作为外部源。因此该查询需要多对多的合并连接。多对多合并连接执行计划显示在图2-23里,连接细节在图2-24里。 

SELECT m.ID, n.Value 
FROM M2C m INNER MERGE JOIN M2D n ON n.ID = m.ID2 
WHERE m.GroupID = @Group1 AND n.GroupID = @Group2

 

 图2-23.多对多合并连接执行计划


 
图2-24.多对多合并连接成本细节


      这里的I/O成本不为0,且参数是MANY-TO-MANY MERGE。检查范围内的行的成本,发现多对多连接操作有如下的成本规则:

I/O Cost = 0.000310471 per row 
CPU Cost 
= 0.0056000 + 0.00004908 per row, 1-1 

STATISTICS IO输出结果用表WorkTable显示了前面多对多合并的两个表的作为总和的一部分的I/O。 

Table 'Worktable'. Scan count 749, logical reads 1250, physical reads 0read-ahead reads 0.

  
带排序操作的合并连接 
      当排序索引不可用时合并连接操作可以和排序操作一起完成。图2-25a显示了内部源上索引分离需求行时的执行计划,但不是按照指定的连接条件排的序。排序操作成本细节显示在图2-25b里。排序随行数增加的CPU成本显示在图2-26里。这种模式的CPU成本推断起来略有困难。注意当成本减去0.0000785后,成本图形在重对数尺寸上是线性的。但坡度略高过1。在大于5000行的某处,排序的CPU成本改变了,但这里不去探究它。


 
图2-25a.带排序操作的合并连接的执行计划


 
图2-25b.排序操作成本细节


 
图2-26.排序操作随行数增加时的CPU成本



      5000行以下的排序操作成本接近下面的规则。在5000和10000行之间有骤然变化。 
     

Sort I/O Cost = 0.011261261 
Sort CPU Cost 
~ 0.0000785 + 0.000005 * (rows ^ 1.16


      排序的CPU成本规则是非线性的。就是说,每行的排序成本随着排序的行数增加。

Tag标签: SQLServer2000

分享到:
评论

相关推荐

    剖析SQL Server执行计划

    ### 剖析SQL Server执行计划 #### 一、引言与概述 SQL Server执行计划是数据库管理系统在处理查询请求时所采用的一系列步骤和技术的集合。这些计划旨在优化查询性能,确保数据能够以最高效的方式被检索。本书《SQL...

    看懂 sql server 执行计划

    SQL Server 执行计划详解 SQL Server 的执行计划是数据库优化的关键步骤。通过查看执行计划,可以了解数据库的查询过程,从而进行优化和改进。本文将通过一个实践示例,介绍如何查看 SQL Server 的执行计划,并解释...

    SQL2000 sp3补丁

    SQL2000 SP3(Service Pack 3)补丁是微软为SQL Server 2000发布的一个重要更新,旨在提升系统性能、稳定性和安全性。SQL Server 2000是一款广泛应用于企业级的数据管理和分析平台,自2000年发布以来,通过不断推出...

    解剖SQL执行计划

    ### 解剖SQL Server执行计划 #### 一、执行计划概览 在深入探讨SQL Server执行计划之前,我们首先需要理解什么是执行计划以及它为何如此重要。执行计划是SQL Server优化器为查询选择的最佳运行策略。当数据库...

    SQL_Server执行计划

    ### SQL Server执行计划详解 #### 一、引言 在数据库管理与优化的过程中,了解SQL Server执行计划至关重要。本文将详细介绍SQL Server执行计划的基本概念、如何捕获执行计划、解读执行计划以及如何利用这些信息来...

    浅析SQL Server中的执行计划缓存(上)

    在SQL Server中,执行计划缓存是一个至关重要的性能优化机制,它减少了编译查询计划所需的资源,提高了系统整体的响应速度。本文将深入探讨执行计划缓存的工作原理、为何需要缓存以及它所缓存的对象类型。 首先,...

    sqlserver2000数据库转移mysql5.pdf

    ### SQLServer2000至MySQL5数据库迁移详解 #### 一、迁移背景与目标 在信息技术快速发展的今天,企业可能会因为各种原因需要将现有的SQL Server 2000数据库迁移到MySQL 5环境中。这样的迁移不仅可以降低维护成本,...

    SQL Server 2000开发指南

    书中会详细介绍SQL Server 2000的备份策略,包括完整备份、差异备份和事务日志备份,并教授如何执行恢复操作以应对数据丢失或系统故障。 此外,性能调优是提升系统效率的重要手段。本书会探讨SQL Server 2000的性能...

    SQL Server 2000完结篇系列之八:SQL Server 2000过程优化详解

    在SQL Server 2000这个经典版本中,数据库管理员和开发者经常面临性能优化的挑战。本篇将深入探讨SQL Server 2000过程优化的相关知识点,旨在帮助你提升数据库系统的运行效率。 1. **查询优化器**:SQL Server 2000...

    SQL Server 2000完结篇系列之七:SQL Server 2000索引优化详解

    SQL Server 2000的查询优化器会自动选择最佳的执行计划,包括选择合适的索引。理解查询优化器的工作原理可以帮助我们更好地设计和使用索引。 总结,SQL Server 2000的索引优化是数据库性能调优的重要环节。通过对...

    Sql Server 数据库超时问题的解决方法

    Sql Server 等待响应时间是指 Sql Server 数据库在执行查询或存储过程时,等待响应的时间。在 Sql Server 2000 中,可以通过设置 sp_configure 的 query wait 选项来调整等待响应时间。query wait 选项可以设定一个...

    通过分析SQL语句的执行计划优化SQL(总结)

    在不同的数据库系统中,如MySQL、Oracle、SQL Server等,都有相应的命令或工具用于查看SQL语句的执行计划,例如SQL Server的`SET SHOWPLAN_ALL`或`SET SHOWPLAN_TEXT`,Oracle的`EXPLAIN PLAN`。 4. **执行计划的...

    SQLServer 2000优化

    - 使用 SQL Server Profiler 工具来监控查询执行计划,并分析潜在的性能瓶颈。 - Query Analyzer 可以帮助识别那些消耗大量资源的查询,并给出优化建议。 6. **锁机制**: - 正确使用锁定机制可以避免并发访问时...

    sqlserver2000优化(必须的)

    以下是从标题“sqlserver2000优化(必须的)”和描述“sqlserver2000优化必看”中提取的关键知识点,这些知识点对于SQL Server 2000的高效运行至关重要。 ### 1. SQL Server 2000优化的重要性 SQL Server 2000作为...

    SQL执行计划

    例如,`GrantFritchey_SQLServerExecutionPlans_Code`这个文件很可能包含的是一个关于如何理解和解析SQL Server执行计划的代码示例。Grant Fritchey是一位知名的SQL Server专家,他的工作可能涉及深入探讨执行计划中...

    SQL Server数据库数据转MySQL工具

    "SQL Server数据库数据转MySQL工具"正是一款解决这一问题的专业软件,它允许用户方便地将SQL Server中的数据转换到MySQL环境中。 SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业...

    sqlserver转access

    3. 转换原因:用户可能出于以下原因选择将SQL Server数据转换到Access:简化管理、本地离线使用、项目规模缩小、成本控制等。然而,需要注意的是,大规模数据和复杂的事务处理在Access中可能会面临性能瓶颈。 4. ...

    sqlserver中的执行单元

    当我们在SQL Server查询分析器中选择"Show Execution Plan"时,我们可以看到一个图形化的执行计划,它展示了SQL语句执行的逻辑流程。 执行计划由一系列的图标组成,每个图标代表一个数据库操作,如扫描、排序、连接...

Global site tag (gtag.js) - Google Analytics