2011年3月8日

摘要: 如何干预执行计划 - - 使用hints提示 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在ORACLE中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。 hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划 阅读全文
posted @ 2011-03-08 21:30 小良cardon 阅读(1897) 评论(0) 推荐(0) 编辑
摘要: 例1: 假设LARGE_TABLE是一个较大的表,且username列上没有索引,则运行下面的语句:SQL> SELECT * FROM LARGE_TABLE where USERNAME = ‘TEST’;Query Plan-----------------------------------------SELECT STATEMENT Optimizer=CHOOSE (Cost=1234 Card=1 Bytes=14)TABLE ACCESS FULL LARGE_TABLE [:Q65001] [ANALYZED] 在这个例子中,TABLE ACCESS FULL LARG 阅读全文
posted @ 2011-03-08 20:46 小良cardon 阅读(10468) 评论(0) 推荐(2) 编辑
摘要: select 的工作原理:1:Parse,语法分析阶段2:Execute,执行3:Fetch,提取数据阶段一:先在Library Cache找这条命令,看执行计划,二:如果没有,就语法分析三:如果语法通过,就对象分析,通过数据字典 比如表存不存在,表列存不存在,表列如果是*,就翻译成全部列名四:获得对象解析锁,锁住表,列这个对象,目的是防止别的用户来改变表,列结构。五:检查权限对象,看用户能不能访问这个对象。比如表,视图。六:服务器生成执行计划,装载到Library Cache中七:检查数据库高速缓存区(Data buffer)中,有没有内容,即看能不能找到对象(表,视图)的数据块(block 阅读全文
posted @ 2011-03-08 20:45 小良cardon 阅读(1429) 评论(0) 推荐(0) 编辑

导航