摘要: 如何干预执行计划 - - 使用hints提示 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在ORACLE中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。 hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划 阅读全文
posted @ 2011-04-03 15:28 liuqun 阅读(525) 评论(0) 推荐(1) 编辑
摘要: 对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下使用SQL Trace Alter session set sql_trace=true; //启用跟踪生成的跟踪文件路径:@oracle_home\ diag\rdbms\orcl\orcl\trace(版本:11g)Alter session set sql_trace=false; //禁用跟踪使用sql_trace,常用初始化参数设置Timed_statistics=true;不设置的话,一些重要信息不会被收集到Max_dump_file_size( alter session set Max_dump_fi 阅读全文
posted @ 2011-04-03 15:26 liuqun 阅读(512) 评论(0) 推荐(1) 编辑
摘要: 用索引提高效率索引是表的一个概念部分,用来提高检索数据的效率. 实际上,ORACLE使用了一个复杂的自平衡B-tree结构. 通常,通过索引查询数据比全表扫描要快. 当ORACLE找出执行查询和Update语句的最佳路径时, ORACLE优化器将使用索引. 同样在联结多个表时使用索引也可以提高效率. 另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证.除了那些LONG或LONG RAW数据类型, 你可以索引几乎所有的列. 通常, 在大型表中使用索引特别有效. 当然,你也会发现, 在扫描小表时,使用索引同样能提高效率.虽然使用索引能得到查询效率的提高,但是我们也必须注意到 阅读全文
posted @ 2011-04-03 13:59 liuqun 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 什么是优化 优化是选择最有效的执行计划来执行SQL语句的过程,这是在处理任何数据的语句(SELECT,INSERT,UPDATE或DELETE)中的一个重要步骤。对Oracle来说,执行这样的语句有许多不同的方法,譬如说,将随着以什么顺序访问哪些表或索引的不同而不同。所使用的执行计划可以决定语句能执行得有多快。Oracle中称之为优化器(Optimizer)的组件用来选择这种它认为最有效的执行计划。什么是执行计划在运行一条DML语句时,oracle可能需要执行多个步骤。例如,从数据库物理文件中获取数据行,或将数据整理为提交语句的用户所需的形式。Oracle运行一条语句的所有步骤被告称为语句的执 阅读全文
posted @ 2011-04-03 10:28 liuqun 阅读(668) 评论(0) 推荐(0) 编辑