Oracle SQL 性能优化技巧大全

需积分: 3 3 下载量 90 浏览量 更新于2024-08-02 收藏 216KB DOC 举报
Oracle SQL 性能优化 Oracle SQL 性能优化是数据库管理员和开发者需要掌握的重要技能,以下是 53 个常用的技巧: **选用适合的 ORACLE 优化器** ORACLE 的优化器共有三种:RULE(基于规则)、COST(基于成本)和 CHOOSE(选择性)。设置缺省的优化器可以通过对 init.ora 文件中 OPTIMIZER_MODE 参数的各种声明,例如 RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS。开发者也可以在 SQL 级或是会话(session)级对其进行覆盖。 **基于成本的优化器(CBO)** 为了使用基于成本的优化器(CBO,Cost-Based Optimizer),开发者必须经常运行 Analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过 Analyze 命令有关。如果表已经被 Analyze 过,优化器模式将自动成为 CBO,反之,数据库将采用 RULE 形式的优化器。 **避免使用 CHOOSE 优化器** 在缺省情况下,ORACLE 采用 CHOOSE 优化器,以避免那些不必要的全表扫描(full table scan)。但是,为了提高性能,开发者应该尽量避免使用 CHOOSE 优化器,而直接采用基于规则或者基于成本的优化器。 **访问 Table 的方式** ORACLE 采用两种访问表中记录的方式:全表扫描(full table scan)和通过 ROWID 访问表。全表扫描就是顺序地访问表中每条记录。ORACLE 采用一次读入多个数据块(database block)的方式优化全表扫描。通过 ROWID 访问表可以提高访问表的效率,因为 ROWID 包含了表中记录的物理位置信息。 **使用索引(INDEX)** ORACLE 采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问 ROWID 的方法,因此那些基于索引列的查询就可以得到性能上的提高。 **共享 SQL 语句** 共享 SQL 语句可以提高性能和节省内存的使用。ORACLE 将 SQL 语句存放在内存中,位于系统全局区域(SGA,system global area)的共享池(shared buffer pool)中。这块内存可以被所有的数据库用户共享。因此,当开发者执行一个 SQL 语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE 就能很快获得已经被解析的语句以及最好的执行路径。 选用适合的 ORACLE 优化器、避免使用 CHOOSE 优化器、使用索引和共享 SQL 语句都是提高 Oracle SQL 性能的重要技巧。