Oracle Explain plan使用总结
写多了SQL语句,伴随着数据量的海增,总会遇到性能的问题。在Oracle领域一个不好的习惯,一旦遇到性能问题就推给DBA来做。长期如此,反而对DBA的工作感到神秘。至少笔者所在单位就是如此,DBA向来是牛气冲天的。
要调整SQL语句的性能,就得知道这条SQL语句花费了多少COST。Explain plan工具可帮我们分析这些工作。而调整SQL语句的性能,肯定要涉及索引了。Oracle索引比较常用的有二种,1.B-TREE索引,B-TREE 适用于值变化较多的列,2.BITMAP索引。BITMAP适用于值变化较少的列(少于300个值),比如:性别这样的列。
有了上述基础就可以开始优化工作了。工具:pl/sql developer。
1.建表
create table HEK_TEST_IN
(
PID INTEGER primary key,
NDATE DATE,
NNOTE VARCHAR2(50)
)
create table HEK_TEST_INDETAIL
(
PID INTEGER not null,
FID INTEGER,
NNAME VARCHAR2(50),
NQTY FLOAT,
NNOTE VARCHAR2(50),
NSIZE VARCHAR2(20)
);
alter table HEK_TEST_INDETAIL
add constraint FK_TEST_1 foreign key (FID)
references HEK_TEST_IN (PID);
create index HEK_TEST_INDETAIL_INDEX on HEK_TEST_INDETAIL (NNAME, NSIZE);
2.测试具体SQL语句到底有没有使用index。
2.1条件查询:
select * from hek_test_in where pid=3
Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS BY INDEX ROWID Object owner=APPS Object name=HEK_TEST_IN
INDEX UNIQUE SCAN Object owner=APPS Object name=SYS_C00211467
分析得出:hek_test_in查询时使用索引扫描,为什么呢?因为我们创建表时,指定Primary Key时,Oracel会自动创建一个UNIQUE INDEX。
-------------------------------------------------------------------------------
2.2连接查询:
select * from hek_test_in a,hek_test_indetail b where a.pid=b.fid;
Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE
NESTED LOOPS
TABLE ACCESS FULL Object owner=APPS Object name=HEK_TEST_INDETAIL
TABLE ACCESS BY INDEX ROWID Object owner=APPS Object name=HEK_TEST_IN
INDEX UNIQUE SCAN Object owner=APPS Object name=SYS_C00211467
分析得出:hek_test_in查询时使用索引扫描,而HEK_TEST_INDETAIL使用全表扫描。
-----------------------------------------------------------------------------
2.3组合索引的条件查询:
select * from hek_test_indetail where nname = ''
Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS BY INDEX ROWID Object owner=APPS Object name=HEK_TEST_INDETAIL
INDEX RANGE SCAN Object owner=APPS Object name=HEK_TEST_INDETAIL_INDEX
分析得出:查询时使用组合索引扫描。注:组合索引跟创建的列顺序有关,如果条件语句换成where nsize='',也会导至全表扫描。
-------------------------------------------
2.4组合索引的排序查询:
select * from hek_test_indetail order by nname
Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE
SORT ORDER BY
TABLE ACCESS FULL Object owner=APPS Object name=HEK_TEST_INDETAIL
分析得出:排序查询时无法使用组合索引,从而导致全表扫描。
2.5 基于NULL条件查询:
select * from hek_test_indetail where nname is null
Explain Paln输出;
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS FULL Object owner=APPS Object name=HEK_TEST_INDETAIL
分析得出:NULL查询导致全表扫描。与此类似的还有is not null,<>也会导至全表扫描。
作者:Jarwang
分享到:
相关推荐
NULL 博文链接:https://babydeed.iteye.com/blog/1567772
oracle执行计划,oracle explain plan,在ORACLE数据库中,需要对SQL语句进行优化的话需要知道其执行计划,从而针对性的进行调整.ORACLE的执行计划的获得有几种方法,下面就来总结下
详细讲解在Oracle中如何使用explain_plan,值得参考和收藏学习。
NULL 博文链接:https://qidaoxp.iteye.com/blog/758552
Oracle中EXPLAIN PLAN的使用技巧
详细介绍了oracle解释计划的原理,对理解oracle解释计划非常有用。
explain plan for select ename,job,sal,comm from empcon where (sal-700);--已解释 desc plan_table; col id for 999 col operation for a16 col option for a16 col object_name for a16 Select id,operation,...
SQL> explain plan for alter index idx_policy_id2 rebuild online; Explained SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT -----------------------------------------------------...
Oracle 执行计划 explain sql execution plan
explain plan set statement_id = &item_id for &sql; select * from table(dbms_xplan.display); explain plan set statement_id= '测试一 ' for select (这里可以是很复杂的查询) 执行. 然后select * ...
Explain Plan 503 Pinned Code 504 Repair Chained Rows 505 Rebuild Table 506 Unix Kernel Parms 507 Windows Registry Parms 508 Analyze All Objects 509 Profilers 512 Oracle Tuning 523 Rebuild Multiple ...
<7> 运行命令 "explain plan for SQL" 或按菜单项 "Explain Plan",能快速地显示 SQL 的执行计划; "Export" 按钮或菜单项,能直接将 SELECT 语句结果转化为 INSERT 语句,方便于数据移植、备份等 <8> 运行命令...
1.如何分析SQL语句 2.选用适合的ORACLE优化器 3.用EXPLAIN PLAN 分析SQL语句 4.使用TKPROF 工具来查询SQL性能状态 5.表分区的应用
query processing,Explain plan,autotrace
explain plan非常令人难解,初学者看看很好,有助于搞清楚最基本的概念
非常全面的ORACLE SQL性能优化介绍及实例:优化器的选择、共享SQL语句、访问Table的方式、减少访问数据库的次数、使用DECODE函数、减少对表的查询、通过内部函数提高SQL效率、用NOT EXISTS替代NOT IN、使用EXPLAIN ...
这篇文档整合了热门的oracle DBA面试问题 一. SQL tuning 类 1:列举几种表连接方式 hash join/merge join/nest loop(cluster join)/index join 2:不借助第三方工具,怎样查看sql的执行计划 set autot ...
1. 预估执行计划 – Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划...
§12.8.5 解释计划(Explain Plan)策略 156 §12.8.6 AUTOTRACE 实用程序 157 第13章 数据访问方法 160 §13.1 使用索引的访问方法 161 §13.1.1 何时创建索引 161 §13.1.2 索引列和表达式的选择 161 §13.1.3 选择...
截取部分题目如下,有答案: 1. 解释冷备份和热备份的不同点以及各自的优点 2. 你必须利用备份恢复数据库,但是你没有...17. 如何生成explain plan? 18. 如何增加buffer cache的命中率? 19. ORA-01555的应对方法?