文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络技术服务器优化--让你的SQL运行速度明显提高
精品推荐
特别推荐
·代理服务器使用原理与选购细则
·统计分析Web服务器日志
·反恐精英CS服务器架设详解
·服务器常见故障的诊断与解决
·服务器性能评估的实战技巧
·Windows 2000 Server网络组件简介
·入门到精通:负载均衡技术全攻略
·教你如何用双SATA硬盘组建RAID系统
·分析并清除web服务器上的网页木马
·安装IIS后出现500错误的解决办法
·Apache下服务器虚拟主机的设置
·怎样选择合适的服务器规避风险
·服务器虚拟化的十大必须考虑因素
·谨慎:整合服务器时易犯十个错误
·IIS虚拟主机网站防木马权限设置安全配置整理
·服务器常见软件故障分析及解决
·浅谈如何为服务器安全地进行升级
·必须了解的五个服务器基础问题
·电影服务器协议、架设及防范配置
·服务器端口大全
热点TOP10
·图文详解 Windows 2003服务器集群安装
·Helix流媒体服务器架设及RMVB制作教程
·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
·网络流量监控器mrtg
·IIS安装配置全攻略
·服务器端口大全
·Apache URL重定向指南
·何谓HTTP 500内部服务器错误
·反恐精英CS服务器架设详解
·部署 Microsoft SQL Server 2005 群集
·统计分析Web服务器日志
·IIS虚拟主机网站防木马权限设置安全配置整理
·Serv-U配置图文教程(1)
·个人电脑变网站服务器全面解决方案
·入门到精通:负载均衡技术全攻略
·安装IIS后出现500错误的解决办法
·Apache下服务器虚拟主机的设置
·怎样选择合适的服务器规避风险
·网吧电影视频服务器架设完全入门教程
·图文教程 Windows 2003群集服务配置

优化--让你的SQL运行速度明显提高

日期:2005年10月31日 作者: 查看:[大字体 中字体 小字体]



  ③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。

二、不充份的连接条件

  例:表card有7896行,在card_no上有一个非聚集索引,表account有191122行,在 account_no上有一个非聚集索引,试看在不同的表连接条件下,两个SQL的执行情况:
select sum(a.amount) from account a,
card b where a.card_no = b.card_no(20秒)


  将SQL改为:
select sum(a.amount) from account a,
card b where a.card_no = b.card_no and a.
account_no=b.account_no(< 1秒)

  分析:
  在第一个连接条件下,最佳查询方案是将account作外层表,card作内层表,利用card上的索引,其I/O次数可由以下公式估算为:
  外层表account上的22541页+(外层表account的191122行*内层表card上对应外层表第一行所要查找的3页)=595907次I/O

  在第二个连接条件下,最佳查询方案是将card作外层表,account作内层表,利用account上的索引,其I/O次数可由以下公式估算为:
  外层表card上的1944页+(外层表card的7896行*内层表account上对应外层表每一行所要查找的4页)= 33528次I/O

  可见,只有充份的连接条件,真正的最佳方案才会被执行。


  总结:
  1.多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。

  2.查看执行方案的方法-- 用set showplanon,打开showplan选项,就可以看到连接顺序、使用何种索引的信息;想看更详细的信息,需用sa角色执行dbcc(3604,310,302)。


三、不可优化的where子句

  1.例:下列SQL条件语句中的列都建有恰当的索引,但执行速度却非常慢:
select * from record where
substring(card_no,1,4)=''5378''(13秒)
select * from record where
amount/30< 1000(11秒)
select * from record where
convert(char(10),date,112)=''19991201''(10秒)

  分析:
  where子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样:
select * from record where card_no like
''5378%''(< 1秒)
select * from record where amount
< 1000*30(< 1秒)
select * from record where date= ''1999/12/01''
(< 1秒)

  你会发现SQL明显快起来!

  2.例:表stuff有200000行,id_no上有非群集索引,请看下面这个SQL:
select count(*) from stuff where id_no in(''0'',''1'')(23秒)

  分析:
  where条件中的''in''在逻辑上相当于''or'',所以语法分析器会将in (''0'',''1'')转化为id_no =''0'' or id_no=''1''来执行。我们期望它会根据每个or子句分别查找,再将结果相加,这样可以利用id_no上的索引;但实际上(根据 showplan),它却采用了"OR策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。因此,实际过程没有利用id_no上索引,并且完成时间还要受tempdb数据库性能的影响。

  实践证明,表的行数越多鞅淼男阅芫驮讲睿眘tuff有620000行时,执行时间竟达到220秒!还不如将or子句分开:
select count(*) from stuff where id_no=''0''
select count(*) from stuff where id_no=''1''

  得到两个结果,再作一次加法合算。因为每句都使用了索引,执行时间只有3秒,在620000行下,时间也只有4秒。或者,用更好的方法,写一个简单的存储过程:

上一页 [1] [2] [3] 下一页 




上一篇:宽带常见故障及解决方法

下一篇:利用MSSQL sp自制未公开的加密函数

优化--让你的SQL运行速度明显提高 相关文章:
·几秒钟让你的电脑百毒不侵,提速百倍!
·XP系统运行慢?小编自用7招解决
·鲜为人知的Windows XP优化
·提高运行速度 教你一步一步优化XP系统
·完全BIOS优化
·清理系统垃圾!让你的Vista跑得更快
·添加或删除启动时自动运行的程序
·使浏览网页速度马上就变快的方法
·BT下载速度变慢原因解读及应对方法分析
·PB代码优化
优化--让你的SQL运行速度明显提高 相关软件:
·用Photoshop美化你的相片
·唤醒你的创业精神
·winxp sp2 完全优化版 GHO 免刻录直接克隆
·注册表优化实战练习手册(图文教程 菜鸟先飞系列教材)
·在光盘上运行的 win98
·秦林新作《管好你的嘴》
·30天改变你的人生
·全能助手Windows优化王 2006 V3.95
·注册表优化大师 V173
·毕克所著的十天内提高单词量到20000

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot