`
niyanshi
  • 浏览: 20157 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一次Oracle 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以后已经变聪明了,所以第二点无效,还是可以随便写写。

 

分享到:
评论

相关推荐

    OracleSQL的优化.pdf

    常量的计算是在语句被优化时一次性完成,而不是在每次执行时。这可以提高 SQL 语句的执行效率。例如,在检索月薪大于 2000 的表达式中,如果 SQL 语句包括第一种情况,优化器会简单地把它转变成第二种。优化器不会...

    ORACLE SQL性能优化系列

    为了不重复解析相同的 SQL 语句,在第一次解析之后,ORACLE 将 SQL 语句存放在内存中。这块位于系统全局区域 SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,...

    oracle sql优化

    总结来说,Oracle SQL优化是一个综合性的任务,需要考虑索引、连接方式、查询结构等多个方面。理解并应用上述知识点,能够帮助你更好地管理和优化你的Oracle数据库,实现更高效的SQL执行。通过持续学习和实践,你...

    Oracle 性能优化之 SQL优化

    ### Oracle 性能优化之 SQL优化 #### 一、引言 在数据库应用中,SQL查询性能直接影响到系统的响应时间和整体性能。对于大型企业级应用而言,优化SQL语句不仅能够提升用户体验,还能显著降低服务器负载,从而节省...

    Oracle Sql 优化

    通过一次查询获取所有所需数据,减少数据库往返次数。合理使用存储过程或函数,可以在服务器端处理数据,减少网络传输。 ##### 3.5 使用DECODE函数 在某些情况下,使用`DECODE`函数可以减少数据库的处理时间,特别...

    Oracle SQL优化法则

    - 全表扫描:Oracle一次性读取多个数据块进行全表扫描,适合小表或索引不适用的情况。 - 通过ROWID访问:ROWID包含记录的物理位置,使用索引可以快速定位ROWID,提高查询速度。建立正确的索引策略是SQL优化的重要...

    oracle_sql性能优化 文档

    ORACLE通过一次读取多个数据块来优化全表扫描,但应尽可能避免。 - **通过ROWID访问**:ROWID包含了表中记录的物理位置信息,通过索引可以快速定位ROWID,提高查询速度。建立和有效利用索引是提高SQL性能的关键,...

    sql优化经验总结

    通过阅读"sql优化经验总结V1.5.ppt"和"sql优化经验总结.ppt",可以更深入地学习到更多实用技巧和案例分析,进一步提升在Oracle SQL优化方面的能力。不断学习和实践,才能在这个领域取得更大的成就。

    Oracle SQL优化

    Oracle SQL优化是数据库管理中的关键环节,其目的是提高查询效率,减少资源消耗,进而提升整个系统的性能。在Oracle数据库环境中,SQL语句的优化涉及到多个层面,包括查询结构的优化、索引的合理使用、数据访问路径...

    Oracle数据库SQL优化总结

    Oracle数据库SQL优化是一个关键的技能,对于提升数据库性能和应用响应速度至关重要。以下是一些针对非DBA的Oracle SQL优化技巧: 1. **选择最有效的表名顺序**:在FROM子句中,应将记录最少的表放在最前面,基础表...

    基于Oracle的SQL优化典型案例分

    本篇将深入探讨“基于Oracle的SQL优化典型案例分析”,旨在帮助数据库管理员和开发人员提升SQL查询效率,降低系统负载,从而提高整体系统性能。 1. **SQL执行计划分析** - Oracle通过执行计划来确定如何执行SQL...

    Oracle SQL性能优化技巧总结

    通过使用`DECODE`函数,可以将原本需要两次查询的操作合并为一次查询,显著提高了查询效率。 通过以上几个方面的介绍和案例分析,我们可以看到,在Oracle数据库中,合理的设计和编写SQL语句可以极大地提高查询性能...

    ORACLE SQL性能优化

    第一次解析SQL之后, ORACLE将SQL语句存放在共享池中. ORACLE只对简单的表提供高速缓冲(cache buffering)这个功能并不适用于多表连接查询. 在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速...

    Oracle SQL优化的53个黄金法则

    Oracle SQL优化是数据库管理中的关键任务,以确保高效的数据检索和整体系统性能。本文将深入探讨53个黄金法则中的几个关键原则,帮助你优化Oracle SQL查询。 1. **选择合适的优化器**: - ORACLE提供三种优化器:...

    oracle_sql性能优化.pdf

    - 全表扫描是对整个表的记录顺序读取,一次性读入多个数据块。在数据表记录量不大,且不频繁更新的数据表上使用全表扫描可能较为高效。但全表扫描会消耗较多的I/O资源,因此在数据量大或经常更新的数据表上使用时要...

    Oracle SQL优化word版本.pdf

    * 全表扫描是顺序地访问表中每条记录,Oracle 采用一次读入多个数据块的方式来优化全表扫描。 * 通过 ROWID 访问可以提高访问表的效率,ROWID 包含了表中记录的物理位置信息。 3. 共享 SQL 语句 Oracle 的共享 SQL...

    Oracle SQL语句性能优化

    - 全表扫描:虽然全表扫描会读取所有记录,但Oracle通过一次性读取多个数据块来优化这一过程。然而,对于大型表,应尽量避免全表扫描。 - ROWID访问:ROWID包含记录的物理位置信息,通过索引可以快速定位ROWID,...

    Oracle sql语句优化规则汇总

    Oracle通过一次性读取多个数据块来优化这一过程,减少磁盘I/O次数。然而,对于大数据量的表,全表扫描可能导致高延迟和资源消耗。 2. **基于ROWID的访问**:ROWID是一种特殊的键,它包含了行在物理存储中的地址。...

Global site tag (gtag.js) - Google Analytics