Microsoft的优化SQL方法

qianjin558 2007-04-09 01:59:24
除调优方法外,我们给你展示了最佳实践,你可应用到你的SQL语句中以提高性能(所有的例子和语法都已在Microsoft SQL Server 2000中验证)。

阅读该系列文章后,你应该对Microsoft 工具包中提供的查询优化工具和技巧有一个基本的了解,我们将提供包含各种各样的以提高性能和加速数据读取操作的查询技巧。

Microsoft提供了三种调优查询的主要的方法:

1、使用SET STATISTICS IO 检查查询所产生的读和写

2、使用SET STATISTICS TIME检查查询的运行时间

3、使用SET SHOWPLAN 分析查询的查询计划

SET STATISTICS IO

命令SET STATISTICS IO ON 强制SQL Server 报告执行事务时I/O的实际活动。它不能与SET NOEXEC ON 选项配对使用,因为它仅仅对监测实际执行命令的I/O活动有意义。一旦这个选项被打开,每个查询产生包括I/O统计信息的额外输出。为了关闭这个选项,执行SET STATISTICS IO OFF.

注:这些命令也能在 Sybase Adaptive Server中运行,虽然结果集可能看起来有点不同。

例如,下面是在Northwind 数据库中对于employees表上的一个行统计的简单查询脚本而获得的I/O统计信息。

SET STATISTICS IO ONGOSELECT COUNT(*) FROM employeesGOSET STATISTICS IO OFFGOResults:---------------2977Table ‘Employees’ . Scan count 1, logical read 53, physical reads 0, readahead reads 0.


这个扫描统计告诉我们扫描执行的数量,逻辑读显示的是从缓存中读出来的页面的数量,物理读显示的是从磁盘中读的页面的数量,Read-ahead 读显示了放置在缓存中用于将来读操作的页面数量。

此外,我们执行一个系统存储过程获得表大小的统计信息以供我们分析:

sp_spaceused employeesResults:name rows reserved data index_size unused-------------- -------- --------- ------- --------------Employees 2977 2008KB 1504KB 448KB 56KB


通过看这些信息我们能得到些什么呢?

◆这个查询没有扫描整个表,在表中的数据量超过1.5M字节,而仅仅执行了53个逻辑I/O操作就得到了结果。这表明该查询发现了一个可用来计算结果的索引,并且扫描索引比扫描所有数据页花费更少的I/O操作。

◆索引页几乎全部放在数据缓存中,所以物理读的值是零。这是因为我们之前不久是在employees表上执行了其他查询,此时表和它的索引已经被缓存。你的查询开销可能有不同。

◆Microsoft报告没有read-ahead(预读)活动。在这种情况下,数据和索引页已经被缓存起来了。当对一个很大的表作表扫描时,read-ahead可能会半路插入进来,并且在你的查询用到它们之前缓存起所需的页。当SQL Server确定你的事务是顺序读取数据库页并且认为它能预测到你下一步将用到的页面时,Real-ahead会自动打开。实际上一个独立的SQL Server连接在你的进程之前已开始运行并为它缓存数据页。(配置和优化read-ahead 参数已超出这篇文章的讨论范围。

在这个例子中,该查询已经尽可能有效率地执行了,不必进一步优化。

SET STATISTICS TIME

一个事务的实耗时间是一个不稳定的测量,因为这些时间与在服务器上其他用户的活动有关。然而,相比那些对你的用户没有任何意义的数据页数字,它提供了一些实际的测量。他们关心等待查询返回的时间消耗,不关心数据的缓存和有效的read-ahead。SET STATISTICS TIME ON命令报告下面的查询的实际占用时间和CPU使用情况。执行SET STATISTICS TIME OFF禁止这个选项。

SET STATISTICS TIME ONGOSELECT COUNT(*) FROM titleauthersGOSET STATISTICS TIME OFFGOResults:SQL Server Execution Times;Cup time=0 ms. Elapsed time=8672 ms.SQL Server Parse and Compile Time:Cpu time=10 ms----------------25(1 row(s) affected)SQL Servre Execution Times:Cpu time=0 ms.? Elapsed time=10 ms.SQL Server Parse and Compile Time:Cup time=0 ms


第一条信息报告了多少使人困惑的占用(实耗)时间,8672豪秒,这个数据与我们的脚本不相关,这显示的是之前一个命令执行以来逝去的时间。你可以忽略这条信息。SQL Server仅仅花费10毫秒时间去分析和编译该查询。花费0毫秒去执行它(在查询结果可看到)。其真实的意思是这个查询所花费的时间太短以至不能计量。最后的信息报告了这个SET STATISTICS TIME OFF命令相关的分析及编译花费了0毫秒。你可以忽略这个信息。最重要的信息以加重字体突出显示。

注意实耗时间和CPU时间是以毫秒显示。这个数字在你的电脑上可能会改变(但是不要尝试与我们的笔记本电脑比较你机器的性能,因为这不是代表性的指标)。而且,每次你执行这个脚本,考虑到你的SQL Server还在处理一些其他事务,你得到的统计信息都可能有一点不同。

转http://database.ccidnet.com
...全文
355 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
free_pop2k 2007-04-09
  • 打赏
  • 举报
回复
LZ好心人,收藏先了
duanzhi1984 2007-04-09
  • 打赏
  • 举报
回复
学习资料啊,
wxshzf 2007-04-09
  • 打赏
  • 举报
回复
做个记号,以后学习
leo_lesley 2007-04-09
  • 打赏
  • 举报
回复
mark~~~ 慢慢看。
vchao13 2007-04-09
  • 打赏
  • 举报
回复
收了!
paoluo 2007-04-09
  • 打赏
  • 举报
回复
這個要好好看看
fan22176391 2007-04-09
  • 打赏
  • 举报
回复
好帖!保存下来慢慢看,^_^!
OracleRoob 2007-04-09
  • 打赏
  • 举报
回复
占个位子
青锋-SS 2007-04-09
  • 打赏
  • 举报
回复
嗯,这次坐上啦.
青锋-SS 2007-04-09
  • 打赏
  • 举报
回复
1
中文 高清 全 Microsoft SQL Server 2005技术内幕 系列之一 其他的几本,我都会全部上传,有需要的点击我的用户名查看我所有的资源会有你想要的其他三本。 编辑推荐 通过专家们架构级的洞察力来优化企业级数据库 以SQL Server顶尖专家的视角,带你深入到SQL Server 2005性能调优和优化的内部。该书包括指导性强的实践、实用的建议及丰富的示例代码,使你的查询语句效率更高,效果更好,以达到数据库性能的优化。 探索如何 通过系统监视器和DMVs,来创建基线和监控工作负荷: 通过设计、操纵和管理跟踪,孤立性能问题: 使用内置的默认值、黑匣子,以及常见的标准跟踪来审计用户的活动; 使用扫描及查找、连接、聚合、联合及并行来分析用户的查询; 使用缓存计划和新计划来产生高效率的查询和低代价的查询; 探测和解决加锁、阻塞及死锁等并发问题; 通过实践来诊断和排查反应时间、吞吐量,以及可扩展的问题。 内容简介 本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。书中详细介绍了如何使数据查询更加高能高效,同时使现有资源最大化的方法。本书还包含了大量的代码示例和表示例以帮助数据库开发人员和管理员理解复杂的逻辑并掌握查询调整和优化。通过阅读本书,数据库开发人员将能够加深对查询优化背景的理解和应用,并开发和调整优化出反应速度更快的数据库。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握查询调整和优化的技巧,以针对不同问题开发出切合实际的高效能的方案。 作者简介 Kalen Delaney还是微软出版社Inside Microsoft SQL Server丛书的编辑,她从事SQL Server方面的工作已有20多年。在SQL Server社区,她是一位知名的专家。她于1995年被评为微软最有价值的专家(MVP)。   Kalen是SQL Server Magazine的特约编辑和专栏作家,她还写作了大量的 目录 序 致谢 引言 Microsoft SQL Server技术内幕丛书的历史 丛书结构 《Microsoft SQL Server 2005技术内幕:T-SQL查询》 《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》 《Microsoft SQL Server 2005技术内幕:存储引擎》 《Microsoft SQL Server 2005技术内幕:查询、调整和优化》 例子和脚本 未被涵盖的主题 免责条款 如何获得支持 关联网站 微软学习站点
本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。书中详细介绍了如何使数据查询更加高能高效,同时使现有资源最大化的方法。本书还包含了大量的代码示例和表示例以帮助数据库开发人员和管理员理解复杂的逻辑并掌握查询调整和优化。通过阅读本书,数据库开发人员将能够加深对查询优化背景的理解和应用,并开发和调整优化出反应速度更快的数据库。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握查询调整和优化的技巧,以针对不同问题开发出切合实际的高效能的方案。 本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。书中详细介绍了如何使数据查询更加高能高效,同时使现有资源最大化的方法。本书还包含了大量的代码示例和表示例以帮助数据库开发人员和管理员理解复杂的逻辑并掌握查询调整和优化。通过阅读本书,数据库开发人员将能够加深对查询优化背景的理解和应用,并开发和调整优化出反应速度更快的数据库。  本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握查询调整和优化的技巧,以针对不同问题开发出切合实际的高效能的方案。
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。本书适合专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者,读者可以通过书中的最佳实践、高级技巧和代码示例来掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。   深入理解T-SQL体系结构,充分利用高级T-SQL查询技术。   本书深入介绍了T-SQL的内部体系结构,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。通过本书提供的最佳实践和示例代码,数据库开发人员和管理员完全可以掌握这门复杂的编程语言,以切合实际的方案来解决复杂的实际问题。通过本书,你将学习到如何:理解逻辑和物理的查询处理;使用方法优化查询;在查询中用TOP选项修改数据;用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;通过逻辑难题提高你的逻辑能力并掌握查询问题的核心等。   你将学习到如何:   理解逻辑和物理的查询处理;   使用方法优化查询;   解决关系分区问题;   使用CTE和排名函数简化及优化解决方案;   用各种技术聚合数据,包括附加属性、旋转、直方图和分组因子;   在查询中用TOP选项修改数据;   用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;   通过逻辑难题提高你的逻辑能力并掌握查询问题的核心; 内容简介 本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们将向你揭示基于集合(set-based)查询的强大威力,并解释为什么它比使用游标的过程化编程(procedural programming)更具优势。同时,它还会教你识别使用基于游标解决方案与基于集合解决方案的优劣。   书中还讲述了其他几种争议较多的构造(camstruct)——如临时表、动态执行、XML和.NET集成——它们在具有强大功能的同时,也具有极大的风险。   本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库专业人员。读者可从中学到大量精湛的技巧,这些技巧会充实您的工具箱和编码技能,并让您顺利地开发出高效的解决方案。 作者简介 Itzik Ben-Gan是Solid Quality Learning的首席导师和创始人。他从1999年开始便一直是SQL Server方面的Microsoft MVP,在世界各地讲授 T-SQL查询、编程和查询优化相关的课程,并提供相关咨询服务。他在SQL Server Magazine和MSDN上发表了多篇文章,并被邀请在许多专题会议上做过报告,包括TechEd、DevWeek、PASS和SQL Server Connections。 目录 序 前言 致谢 引言  本书的组织  系统要求  安装示例数据库  更新  代码示例  本书支持 第1章 逻辑查询处理  逻辑查询处理中的各个阶段   逻辑查询处理阶段简介  Customers/Orders场景下的示例查询  逻辑查询处理步骤详解   步骤1:执行笛卡尔乘积(交叉联接)   步聚2:应用ON筛选器(联接条件)   步骤3:添加外部行(Outer Row)   步骤4:应用WHERE筛选器   步骤5:分组   步骤6:应用CUBE或ROLLUP选项   步骤7:应用HAVING筛选器   步骤8:处理SELECT列表   步骤9:应用DISTINCT子句   步骤10:应用ORDER BY子句   步骤11:应用TOP选项  SQL Server 2005中新的逻辑处理阶段   表运算符   OVER子句   集合操作  结论 第2章 物理查询处理  查询处理期间的数据流  编译   Algebrizer   优化   使用查询计划   更新计划  结论   致谢 第3章 查询优化  本章用到的示例数据  优化方法论   分析实例级的等待   联系等待和队列   确定方案   细化到数据库/文件级别   细化到进程级别   优化索引/查询  查询优化工具   syscacheobjects   清空缓存   动态管理对象   STATISTICS IO   测量查询的运

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧