当前位置 > 首页 > Sql

一次Oracle SQL优化的经验

2010-11-13 13:14:00来源:Sql

前些时候候遇到一个SQL的性能问题,在解决过程里了解到了一些东西。有数据库表T,主键是列A, B, C, D, E。每天需要定时从上游数据库源取数据过来更新,大约10几万条。更新的操作过程是,对每条上游数据按几个关键字段在表T中进行删除操作。delete from T where B = ? and C=? and E = ? 然后再进行Insert操作。
系统运行到三个多月的时候,遇到了问题。UAT环境(Oracle 10g)性能正常,10万条记录更新是10多分钟,Production环境(Oracle 9i,还没来得及升级), 有一天突然从10多分钟变成了一个小时,用户无法接受。首先确认了表的统计信息都是最新的,在分析查询计划后,发现性能下降主要由delete操作引起的,10g在优化中找到了索引,而9i在优化中用了CBO,全表扫描。试着改成强制使用RBO,还是没有用到索引。后来想到,可能是因为列A没有在where条件中,而我们除了主键以外,没有建另外的索引,所以聚集索引匹配的时候,第一个字段没有匹配上,就放弃使用索引了。而10g的优化器聪明一些,第一个列没找到后,还尝试了继续匹配。于是试着在where中加上A=?这人条件,再执行,果然用上索引了。由于A条件放在where中没什么意义,所以后来的解决办法是在区别度比较大的列C上加了一个唯一索引,再执行时速度有明显提升,从一个小时回到了10多分钟。
总结三点:
1.Oracel不同版本的优化器智商有差距。
2.我们还是要尊重一般经验,在有只有主键聚集索引时, 至少把第一列作为的where里的条件。
3.由于10g以后已经变聪明了,所以第二点无效,还是可以随便写写。


  • SQL 查询排序

    2011-1-19 9:21:00

    降序: select * from 表 Order by 字段 DESC 升序: select * from 表 Order by 字段 ASC 也可以多个字段分别先后排序.只要在ord

  • 原创-php以excle格式导出mysql里数据乱码?急!加

    2011-4-15 22:47:00

    数值库是 utf8,由于数值库里皆是繁体中白。导出MYSQL数值时是纯治的标记。请给出一个可行的php导出excle的代码。紊乱的标记是怎样归事?是不是和excle版原触及 。假如没有是答题有能够出

  • sqlserver split 功能实现

    2011-6-8 0:01:00

    alter function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a var

  • 揭秘企业用户追捧Google Apps原因

    2009-12-15 6:46:00

    就开始使用 Google Search与Gmail等网络服务,而且也改变了一般企业对内部信息系统的想法,例如 需要自己架设吗?公司的网页究竟是要外包出去、还是要自己请一位网页设计师来处理? 简而

  • Google资助移动Ogg Theora开发

    2010-4-12 12:21:00

    Google 决定资助 开发Ogg Theora的ARM处理器优化版 。 Google 官方blog 称,Web视频目前没有一个标准,有些网站使用Flash,但这要求用户有Flash播放器;有些

  • Google 超越 Yahoo! Alexa 全球排名 NO.1

    2009-2-4 13:20:00

    Alexa 官方博客宣布: Google Passes Yahoo!( Google 超越 Yahoo! ),说” Google is the #1 Alexa Ranked site on

  • Gmail 防黑客新功能

    2010-3-26 13:11:00

    在2008年Gmail新增的功能允许你远程让入侵你帐户的人强制退出。今天,Gmail又增加了新的安全功能,如果它发现可能存在非法入侵,会在你下次登录Gmail的时候用醒目的文字提示

  • mysql存储过程学习笔记--php应用

    2011-8-28 20:19:00

    点烟看寂寞燃烧 孤单了,点支香烟,静静的看着它在指尖燃烧殆尽. 烟之点燃,是为了燃烧一切的寂寞. 连接数据库 <?php $mysqli = new mysqli("lo

  • sql2000,收缩数据库被禁用,如何恢复设置?

    2012-11-22 11:53:00

    在sql2000的企业管理器中,对数据库右键--所有任务--收缩数据库/分离数据库 这2项是灰掉的,说明是不是没有权限操作,那如何设置可以操作呢?

  • Gseeker没有关闭

    2009-8-24 21:05:00

    此前在RSS中出现一些莫名其妙的英文文章,对大家带来干扰,请多多海涵! 暂时没有收到cw官方的任何消息,这个故障是在转换服务器的时候,域名指向目录出现的时间差的问题。正常的程序应该是做好