频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Microsoft的优化SQL方法(2)

作者: 佚名 出处:铸锐论坛 2007-04-03 14:25    砖    好    评论   进入论坛
阅读提示:本文是SQL Server SQL语句优化系列文章的第一篇。该系列文章描述了在Micosoft’s SQLServer2000关系数据库管理系统中优化SELECT语句的基本技巧,我们讨论的技巧可在Microsoft's SQL Enterprise Manager或 Microsoft SQL Query Analyzer(查询分析器)提供的Microsoft图形用户界面使用。

如果你需要测量一系列的查询或者存储过程的实耗持续时间,更好的办法是采用程序设计的方式(如下所示)。当你运行多个命令时你不得不进行手工合计,这是因为STATISTICS TIME只报告单个查询的持续时间。想象一下,当你对一个在循环里执行成千上万次查询的脚本进行计时的情况下,将面临大量的输出和大量的手工工作。

相反,考虑下面这个脚本在事务的前后分别捕获时间并以秒的形式报告总持续时间(你也可以使用毫秒):

DECLARE @start_time DATETIME
SELECT @start_time=GETDATE()

SELECT  ’Elapsed Time,sec’=DATEDIFF(second, @start_time,GETDATE())
GO

如果你的脚本被GO分成几步,你不能用本地变量来保存开始时间。变量在GO命令执行后就被销毁。但你可以象这样在临时表里保存开始时间。

CREATE TABLE #save_time (start_time DATETIME NOT NULL)
INSERT #save_time VALUES ( GETDATE())
GO

< any script that you want to time (may include GO) >
GO
SELECT ‘Elapsed Time, sec’ = DATEDIFF ( second, start_time, GETDATE())
FROM TABLE #save_time
DROP TABLE #save_time

GO

请注意,SQL Server’s DATETIME 数据类型存储的时间是以3毫秒为增量。使用DATETIME数据类型不可能获得比这更细的时间粒度。

SHOWPLAN 输出和分析

这篇文章通过explain plan(解析计划)解释Microsoft SQL Server 2000 使用SET SHOWPLAN_TEXT ON 所输出内容的意义和用处。一个explain plan(也被叫做查询计划,执行计划,或者优化计划)提供了数据库查询引擎执行SQL事务的十分详细的步骤。知道如何阅读explain plan有助于提高高端查询调整和最优化的能力。

注:大部分的例子要么是基于PUBS数据库,要么是基于SQL Server系统表的.针对这些实例,我们给很多表增加了好几万条记录以便于在评估查询计划时体现查询优化器的实际作用。

SHOWPLAN 输出

我们喜欢查询优化器的一个功能就是以查询执行计划的形式提供反馈。现在我们可以更为详细地说明语句的执行,并描述你可能在查询计划中遇到的消息。理解这个输出可以使你的优化水平达到一个新高度。你可以不再把优化器视为一个可以处理你的查询语句的有魔力的“黑盒子”,

下面的命令指示SQL Server显示在同一个连接(或进程)中每个查询的执行计划,或将这个选项关闭。

SET SHOWPLAN_TEXT { ON | OFF }

默认情况下,SHOWPLAN_TEXT ON使得你正在审查的代码不被执行。而是,SQL Server 编译这些代码并且显示这个查询的执行计划。直到你发出SET.SHOWPLAN_TEXT OFF命令后它才停止。

其它有用的SET命令

有各种各样对调优和调试有用的SET命令。在这篇文档前面我们提到了SET STATISTICS命令。在某些情况下你可以发现其它SET命令的用处:        

◆SET NOEXEC{ ON | OFF}: 检查你的Transact-SQL代码的语法,包括编译该代码但不执行。当使用延迟名字解析时,这对检查一个查询语句的语法是很有用的。即,当一个表还没有创建时,你就可以检查基于该表的查询语句的语法。
◆SET FMTONLY{ ON | OFF }:仅向客户端返回查询的元数据。对于SELECT语句,通常仅返回列头。
◆SET PARSEONLY { ON | OFF }:检查你的Transact-SQL代码的语法,但不编译或执行该代码。

一旦设为 ON这些命令将一直有效,直到你手工关闭它们。这些设置不是马上生效,但它们将从下一个步骤开始生效,换言之,你必须在SHOWPLAN or NOEXEC等设置生效前发出GO命令。

典型的T-SQL代码如下,获得一个查询的执行计划,而不实际执行。

SET SHOWPLAN_TEXT ON
GO

   GO
SET SHOWPLAN_TEXT OFF
GO

我们将展示几个SHOWPLAN_TEXT 输出的例子。为了避免冗余,我将不重复上面SET命令的展示.在这个部分里所提供的查询都将代替这个脚本中的标签并且都象上面展示的一样“包装”。

事实上SHOWPLAN有两个版本:SHOWPLAN_ALL和SHOWPLAN_TEXT。他们提供的信息基本上一样。然而,SHOWPLAN_ALL输出的结果是准备给图形查询工具的而不是给听众的。我们在这整篇文章中将用到SHOWPLAN_TEXT,可提供更可读的格式输出。下面的简单查询选择authors表的所有行。因为我们没有提供where子句所以它除了扫描整个表别无选择:select * form authors

在下面的表中SHOWPLAN_TEXT输出的结果没有格式化,我们不得不从SHOWPLAN_ALL的输出中整理出更多的可读信息:

这里重要的不同是SHOWPLAN_ALL语句返回了很多有用的调优信息,但这些很难理解和应用。

SHOWPLAN 操作

SHOWPLAN操作,有时叫做“标签”(tag),其中一部分操作非常清晰地说明了SQL Server的做法,而其它一些操作将把人难住。这些操作分成物理操作和逻辑操作。物理操作描述被用来处理查询的物理算法,例如,执行一个索引查找。逻辑操作描述语句中使用的关系代数操作,如聚合运算等。SHOWPLAN的结果被细分非具体的步骤分成几步。每个查询的物理操作代表一个独立步骤。步骤通常会伴有一个逻辑操作,但不是所有的步骤都包括逻辑操作。此外,大部分的步骤都有一个操作(要么逻辑操作要么物理操作)和一个参数。参数是操作所影响的查询组件。关于所有执行计划步骤的讨论内容非常繁多。请关注本系列的其它文章。

【文章相关内容】

第一页SET STATISTICS IO检查所产生的读和写/SET STATISTICS TIME检查运行时间

第二页SET SHOWPLAN分析查询计划 

【责任编辑:火凤凰 TEL:(010)68476606-8007】


共2页: 上一页 [1] 2
【内容导航】
关于 SQL  优化  方法
专题
如何有效防御SQL注入攻击
Sun以10亿美元并购开源数据库厂商MySQL
如何优化IT 控制能耗
Oracle数据库开发之PL/SQL基础应用
杀毒软件优化和使用技巧
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看81120次)
·UML类图详解 (查看72587次)
·C++是垃圾语言?! (查看42719次)
·C#技术开发指南 (查看40290次)
·UML统一建模语言 (查看39225次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (431个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (254个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (658个好)
·Java基础教程 (578个好)
·.NET开发手册 (282个好)
·PB开发教程 (213个好)
·Delphi开发技术手册 (200个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。