• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 数据库 >> MSSQL >> 详细内容
 

推荐文章

  • SQL数据库的备份、压缩与SQL数据库数据处理的方法
  • 压缩SQL数据库
 
 

热点文章

  • 安装SQL Server 2005实例环境图解
  • SQL数据库的备份、压缩与SQL数据库数据处理的方法
  • SQL SERVER 2005数据库镜像
  • SQL数据库还原出现错误112(磁盘空间不足)的解决办法
  • 如何使用SQL Server 2000中的XML功能
  • Server 2005性能排错
  • SQL Server 2000中的SQL语言简介
  • 在SQL Server中的关系型数据仓库分区策略
  • SQLServer删除日志方法
  • 压缩SQL数据库
  • SQL精妙语句
  • SQL Server 2000中的SQL语言简介(一)
 
 

相关文章

  • 微软新一代数据库SQL Server 2008明年初上市
  • SQL Server非正常删除日志文件(ldf)恢复方法
  • SQL Server 性能优化工具
  • SQL Server性能分析参数
  • SQL Server数据仓库相关概念及构建流程
  • 详解SQL Server中数据库快照工作原理
  • SQL Server对图像数据的存储机制介绍
  • SQL Server数据库中存储引擎深入探讨
  • 构造SQL Server的安全门
  • SQL Server数据库中使用触发器经验谈
  • SQL Server乐观锁定和悲观锁定实例
  • 四项技术 助你提高SQL Server的性能
 
 

百度搜索

 
 

理解SQL Server的SQL查询计划

  • 阅览次数:
  • 文章来源: a hear
  • 原文作者: 不详
  • 整理日期: 2007-04-07
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

通过比较连接和子查询说明分支步骤

一条正确的老规则是:在结果集相同的情况下,连接比子查询具有更好的性能。

SELECT au_fname,au_lname

FROM authors

WHERE au_id IN (select au_id from titleauther )

StmtText

-------------------------------------------------------------------------------------------

|---Nested Loops(Inner Join, OUTER ReFERENCES:([titleauthor].[au_id])

|--Stream Aggregate(GROUP BY:([titleauthor].[au_id]))

| |--Index Scan(OBJECT:([pubs].[dbo].[titleauthor].[auidind]),ORDERED FORWARD)

|--ClusteredIndex Seek(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind]),

SEEK:([authors].[au_id]=[titleauthor].[au_id]) ORDERED FORWARD)

Table ‘authors’. Scan count 38,logical reads 76,physical reads 0,read-ahead reads 0.

Table  ‘titleauthor’. Scan count 2, logical reads 2, physical reads 1,read-ahead reads 0.

在这种情况下,查询引擎选择一个嵌套循环操作。这个查询被迫用聚集索引读取整个authors表,在处理中执行大量的逻辑页读。

注意:在带分支步骤的查询中,缩进行给你展示那些步骤是其它步骤的分支。

Select distinct au_fname,au_lname

From authors as a

Join titleauthor as t ON a.au_id=t.au_id

StmtText

---------------------------------------------------------------------------------

|--stream Aggregate(group by: ([a].[au_lname].[a].[au_fname]))

|-Nested loops(Inner Join,OUTER REFERENCES: ([a].[au_id]))

|-Index scan(OBJECT:([pubs].[dbo].[authors].[authord ]as[a]),ordered forward)

|-Index Seek (OBJECT: [pubs].[dbo].[titleauthor].[authord ]as [t]),

SEEK: ([t].[au_id]=[a].[au_id]) ORDER FORWARD)

Table ‘titleauthors’ .Scan count 23,logical reads 23,

physical reads 0,read ahead reads 0.

Table ‘authors’ .Scan count 1,logical reads 1,physical reads 0,read-ahead read 0.

上面的这个查询中,titleauthors表逻辑读的数字上升而authors表下降。注意到,stream aggregation在查询计划中位置更高,即发生的更晚。

比较查询计划

可以使用查询计划比较两个不同查询的相对效果。如,你可能想知道是否一个查询比另一个查询增加了额外的开销或者选择了不同的索引策略。

在这个例子中,我们比较两个查询。第一个使用SUBSTRING第二个使用LIKE。

Select *

From authors

Where substring(au_lname,1,2)=’Wh’

StmtText

--------------------------------------------------------------

|--Clustered

Index  Scan(OBJECT: ([pubs].[dbo].[authors].[UPKCL_auidind])

Where: (substring([authors].[au_lname],1,2)=’Wh’))

与使用LIKE的相似查询相比较:

Select *

From authors

Where au_lname like ‘Wh%’

StmtText

-------------------------------------------------------------------------

|-Bookmark Lookup(BOOKMARK: ([Bmk1000]),OBJECT: ([pubs].[dbo].[authors]))

|-Index Seek(OBJECT:([pubs].[dbo].[authors].[sunmind]),

SEEk:([authors].[au_lname]>=’WGp’ AND [authors].[au_lname]<’WI’),

WHERE:(like([authors].[au_lname],’Wh%’,NULL)) ORDERED FORWARD)

很明显,第二个查询使用INDEX SEEK操作,第一个查询使用了CLUSTERED INDEX SCAN操作,第二个查询计划比第一个更简单。

当我们比较查询计划中那一个最好时,事实上我们更愿意用SET STATISTICS PROFILE ON或SQL Query Analyzer的Graphic Execution Plan(图形执行计划)特性而不是SET SHOWPLAN_TEXT ON。这些工具将以百分率的方式明确给你展示每一个查询计划步骤的处理消耗。这可以告诉你每种选择的或多或少的查询消耗情况。你还可以同时运行两个或更多查询来看哪个执行的最好。

为了获得最全面的性能测量信息,使用SET STATISTICS IO 和SET STATISTICS TIME也是很重要的。

[1] [2] [3]

上一篇:PHP使用zlib扩展实现页面GZIP压缩输出
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号