|字号 订阅
以下面的SELECT语句为例子:
从三张表中取数据,按我以前的想法,只要WHERE语句那里有能让三张表连接起来的条件就可以。所以我只使用了:
按F5后,可以看到这样做的执行计划如下:
修改后的SELECT语句如下:
执行计划的执行顺序是,从内层至外层,从上往下。比如上面修改后的实行计划中,数据库先对ORDER_HEADER的主键做了一个索引范围检索,然后再对XXWMS_DLX_SERIAL_NUMBER的非唯一性索引XXWMS_DLX_SERIAL_NUMBER_N4做索引范围检索。
在做修改之前,SERIAL_NUMBER表和XXWMS_DLX_SERIAL_NUMBER表使用了循环嵌套(NESTED LOOPS)的连接方法,得到结果后再与ORDER_HEADER进行哈希连接。由于两个表的数据量都比较大(SERIAL_NUMBER在测试环境中数据量达到一千四百万条左右),循环嵌套连接的步骤显然开销了很多。
可以猜想,如果循环嵌套连接中其中一个表的数据量小一点,就可以减少很多开销。于是,在连接条件中多加一条xx.client_id = oh.client_id。这样就使用了ORDER_HEADER的主键去和XXWMS_DLX_SERIAL_NUMBER的N4索引进行连接,得到结果以后再去和SERIAL_NUMBER连接。结果在上图可以看到,COST只有95,大大加快了执行的效率。
这个经历让我觉得PL/SQL的优化相当神奇,效果是一样的,但只是加一个条件就可以使得执行效率有如此大的提高。就这个改变,使得弹出来的超时提醒的几率大大降低,对于用户来说这个改变是很重要的。
create table PLAN_TABLE (
statement_id varchar2(30),
timestamp date,
remarks varchar2(80),
operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric);
建表的sql在rdbms/admin下有,名字是utlxplan.sql
我用的是9i,其他版本的名字可能不一样,
然后执行
explain plan for sql语句
然后可以执行这个sql看结果
SELECT LPAD (' ', 2 * LEVEL) ||
operation ||
' ' ||
options ||
' ' ||
object_name query_plan
FROM plan_table
CONNECT BY PRIOR id = parent_id
START WITH id = 1
ORDER BY id;
相关推荐
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
pl/sql developer11.0下载 pl/sql developer11.0下载 pl/sql developer11.0下载
PL/SQL Developer 8.0.3 1510 含注册机 PL/SQL Developer is an Integrated Development Environment that is specifically targeted at the development of stored program units for Oracle Databases. Over ...
PL/SQL developer 12.07 注册码 可以使用,不错,自己用过了,分享给大家
虽然目前来看 PL/SQL Developer 的功能远不如 SQL Developer,但它是用纯 JAVA 开发的 ORACLE 数据库管理工具,所以可以比较轻松的支持跨操作系统平台使用,可以在非 windows OS 上使用。由于 PL/SQL Developer 在 ...
用来解决pl/sql developer 8.0中版本问题
PL/SQL developer 12.0 注册码 ,希望有用,2018/07/23,不用注册机,注册码也是可以注册的。
plsqldev1001 oracle use tool
PL/SQL Developer(pl/sql)是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。 <br>此版本包含注册文件和简体中文语言安装包 <br>Enhancements in PL/SQL Developer 7.1.5 ====================...
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
DBATools For PL/SQL Developer 是一款PL/SQL Developer的辅助插件,主要功能是提供许多DBA数据库管理的功能,使ORACLE工程师不仅可以使用PL/SQL Developer进行开发设计,同时也可以进行数据库管理及监控,大大提高...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加...
PL/SQL developer 12.07 注册码,亲测有效 PL/SQL developer 12.07 注册码,亲测有效 PL/SQL developer 12.07 注册码,亲测有效 PL/SQL developer 12.07 注册码,亲测有效 PL/SQL developer 12.07 注册码,亲测有效 ...
PL/SQL Developer 10.0.5最新版本 带sn(通过网上获得)。亲测好用推荐给大家
PL/SQL Developer(pl/sql 7.1.5)是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。 <br>此版本包含注册文件和简体中文语言安装包 <br>Enhancements in PL/SQL Developer 7.1.5 ==============...
PL/SQL Developer 7.0 用户指南,讲解相关操作 PL/SQL Developer 7.0 用户指南,讲解相关操作
PL/SQL Developer超强大的oracle数据库编辑器; PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,可以大大缩短...
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发,包括PL/SQL编辑器,集成调试器,PL/SQL完善器……