All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
使用有趣的自定义标记来布局页面_JavaScript技术_编程技术
温故知新ASP.NET,2.0(C#)(4),-,Cache&SqlCacheDependency_[Asp.Net教程]
ASP.NET生成静态HTML页面并分别按年月目录存放_.net资料_编程技术
应用技巧:动态网页中直接不让访问PHP程序文件_php资料_编程技术
Web基础控件开发--属性(续)_[Asp.Net教程]
SQL Server导ACCESS自动编号之解决_[SQL Server教程]
总结showModalDialog和showModelessDialog用法_JavaScript技术_编程技术
ASP.NET自动识别GB2312与UTF-8编码的文件_.net资料_编程技术
ASP.NET底层架构探索之再谈.NET运行时_.net资料_编程技术
实战经验:PHP+MySQL数据库论坛简易通_php资料_编程技术
Reading number is top 10 pictures
小学生作文又现神作,你不得不佩服
HongMenYan premiere XinLiangGong clairvoyant outfit PK YiFeiLiu1
生活中总有些低调的人,不经意间散发出土豪的气质
The real super beauty1
Beautiful Japanese beauty(漂亮的日本美女)3
沙漠里的美女
A man's favorite things6
Ashlynn Brooke a group sexy photo2
Household design of gorgeous series
性感丰满身材火爆de美女1
Download software ranking
双旗镇刀客B
超级战舰
Unix video tutorial17
Boxer's Top ten classic battle1
Unix video tutorial18
Ashlynn Video1
Tram sex maniac 2 (H) rar bag8
Love the forty days
asp.net技术内幕
XML+Web+Service开发教程
归海一刀 published in(发表于) 2014/2/1 0:23:56 Edit(编辑)
让SQL程序更快的运行:语句优化分析_[SQL,Server教程]

让SQL程序更快的运行:语句优化分析_[SQL,Server教程]

让SQL程序更快的运行:语句优化分析_[SQL Server教程]

操作符优化

in 操作符

用in写出来的sql的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。

但是用in的sql性能总是比较低的,从oracle执行的步骤来分析用in的sql与不用in的sql有以下区别:

oracle试图将其转换成多个表的连接,如果转换不成功则先执行in里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用in的sql至少多了一个转换的过程。一般的sql都可以转换成功,但对于含有分组统计等方面的sql就不能转换了。

推荐方案:在业务密集的sql当中尽量不采用in操作符。

not in操作符

此操作是强列推荐不使用的,因为它不能应用表的索引。

推荐方案:用not exists 或(外连接+判断为空)方案代替

<> 操作符(不等于)

不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。

推荐方案:用其它相同功能的操作运算代替,如

a<>0 改为 a>0 or a<0

a<>’’ 改为 a>’’

is null 或is not null操作(判断字段是否为空)

判断字段是否为空一般是不会应用索引的,因为b树索引是不索引空值的。

推荐方案:用其它相同功能的操作运算代替,如

a is not null 改为 a>0 或a>’’等。

不允许字段为空,而用一个缺省值代替空值,如业扩申请中状态字段不允许为空,缺省为申请。

建立位图索引(有分区的表不能建,位图索引比较难控制,如字段值太多索引会使性能下降,多人更新操作会增加数据块锁的现象)

> 及 < 操作符(大于或小于操作符)

大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段a,30万记录的a=0,30万记录的a=1,39万记录的a=2,1万记录的a=3。那么执行a>2与a>=3的效果就有很大的区别了,因为a>2时oracle会先找出为2的记录索引再进行比较,而a>=3时oracle则直接找到=3的记录索引。

like操作符

like操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如like ‘%5400%’ 这种查询不会引用索引,而like ‘x5400%’则会引用范围索引。一个实际例子:用yw_yhjbqk表中营业编号后面的户标识号可来查询营业编号 yy_bh like ‘%5400%’ 这个条件会产生全表扫描,如果改成yy_bh like ’x5400%’ or yy_bh like ’b5400%’ 则会利用yy_bh的索引进行两个范围的查询,性能肯定大大提高。

union操作符

union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表union。如:

select * from gc_dfys

union

select * from ls_jg_dfys

这个sql在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

推荐方案:采用union all操作符替代union,因为union all操作只是简单的将两个结果合并后就返回。

select * from gc_dfys

union all

select * from ls_jg_dfys


sql语句索引的利用

对条件字段的一些优化

采用函数处理的字段不能利用索引,如:

substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’

trunc(sk_rq)=trunc(sysdate), 优化处理:

sk_rq>=trunc(sysdate) and sk_rq

进行了显式或隐式的运算的字段不能进行索引,如:

ss_df+20>50,优化处理:ss_df>30

‘x’||hbs_bh>’x5400021452’,优化处理:hbs_bh>’5400021542’

sk_rq+5=sysdate,优化处理:sk_rq=sysdate-5

hbs_bh=5401002554,优化处理:hbs_bh=’ 5401002554’,注:此条件对hbs_bh 进行隐式的to_number转换,因为hbs_bh字段是字符型。

条件内包括了多个本表的字段运算时不能进行索引,如:

ys_df>cx_df,无法进行优化

qc_bh||kh_bh=’5400250000’,优化处理:qc_bh=’5400’ and kh_bh=’250000’

应用oracle的hint(提示)处理

提示处理是在oracle产生的sql分析执行路径不满意的情况下要用到的。它可以对sql进行以下方面的提示

目标方面的提示:

cost(按成本优化)

rule(按规则优化)

choose(缺省)(oracle自动选择成本或规则进行优化)

all_rows(所有的行尽快返回)

first_rows(第一行数据尽快返回)

执行方法的提示:

use_nl(使用nested loops方式联合)

use_merge(使用merge join方式联合)

use_hash(使用hash join方式联合)

索引提示:

index(table index)(使用提示的表索引进行查询)

其它高级提示(如并行处理等等)

oracle的提示功能是比较强的功能,也是比较复杂的应用,并且提示只是给oracle执行的一个建议,有时如果出于成本方面的考虑oracle也可能不会按提示进行。根据实践应用,一般不建议开发人员应用oracle提示,因为各个数据库及服务器性能情况不一样,很可能一个地方性能提升了,但另一个地方却下降了,oracle在sql执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎片)、数据库对象(表、索引)统计信息是否正确这几方面分析。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.