文档详情

Oracle PL SQL程序开发与性能调优_.ppt

发布:2017-09-27约字共27页下载文档
文本预览下载声明
什么是ROWID ROWNID是row在数据文件中的具体位置:64位编码的数据,A-Z, a-z, 0-9, +, 和 / 。 如:SELECT ROWID, * FROM emp 什么是索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。 它与类似书的目录结构。Oracle 的“索引”对象,与表关联的可选对象,提高SQL查询语句的速度。索引直接指向包含所查询值的行的位置,减少磁盘I/O。 与所索引的表是相互独立的物理结构 用NOT EXISTS: select * from serv_2 t1 where not exists (select 1 from cust_2 t2 where t2.cust_id = t1.cust_id and t2.state = 70A); 已选择126行。 已用时间: 00: 00: 00.78 执行计划 ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 FILTER 2 1 TABLE ACCESS (FULL) OF SERV_2 3 1 TABLE ACCESS (BY INDEX ROWID) OF CUST_2 4 3 INDEX (UNIQUE SCAN) OF SYS_C0017303 (UNIQUE) 高效的写法: select * from cust_2 t where t.cust_id 978000 - 1; 已选择164行。 已用时间: 00: 00: 00.34 执行计划 ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF CUST_2 2 1 INDEX (RANGE SCAN) OF SYS_C0017303 (UNIQUE) SQL语句性能调优 方法一: select * from cust_2 t1, serv t2 where t1.cust_id = t2.cust_id; 已选择11976行。 已用时间: 00: 00: 04.09 执行计划 ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (FULL) OF SERV 3 1 TABLE ACCESS (BY INDEX ROWID) OF CUST_2 4 3 INDEX (UNIQUE SCAN) OF SYS_C0017303 (UNIQUE) 方法二: select * from serv t1, cust_2 t2 where t1.cust_id = t2.cust_id; 已选择11976行。 已用时间: 00: 00: 03.20 执行计划 ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (BY INDEX ROWID) OF SERV 2 1 NESTED LOOPS 3 2 TABLE ACCESS (FULL) OF CUST_2 4 2 INDEX (RANGE SCAN) OF IDX_SERV_CUST_ID (NON-UNIQUE) WHERE子句中的连接顺序. ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。例如,要查询所有文圣区销户用户数: 方法一:
显示全部
相似文档