Oracle的自动数据库诊断监控程序剖析
2007-05-13 12:29:07 来源:WEB开发网核心提示: set serveroutput on size 999999set long 999999select dbms_sqltune.report_tuning_task ('FOLIO_COUNT') from dual;显示的输出结果仔细查看这些建议;顾问说您可以通过在
set serveroutput on size 999999
set long 999999
select dbms_sqltune.report_tuning_task ('FOLIO_COUNT') from dual;
显示的输出结果仔细查看这些建议;顾问说您可以通过在 OLD_ACCOUNT_NO 列上创建一个索引来改进性能。更佳的是,如果创建索引,顾问计算了查询成本,从而使潜在的节省量变得更加可定义、更加具体。
当然,考虑到本示例的简单性,通过手动检查也能得到这种结论。但是,可以想象出该工具对于那些更复杂的查询十分有用,因为对这些查询执行手动检查也许是不可能的或不实际的。
查询重构
假定查询更复杂:
select account_no from accounts a
where account_name = 'HARRY'
and sub_account_name not in
( select account_name from accounts
where account_no = a.old_account_no and status is not null);
顾问建议如下:
1- Restructure SQL finding (see plan 1 in explain plans section)
----------------------------------------------------------------
The optimizer could not unnest the subquery
at line ID 1 of the execution
plan.
Recommendation
--------------
Consider replacing "NOT IN" with "NOT EXISTS" or ensure
that columns used on both sides of the "NOT IN" operator
are declared "NOT NULL" by adding
either "NOT NULL" constraints or "IS NOT NULL" predicates.
Rationale
---------
A "FILTER" operation can be very expensive because it
evaluates the subquery for each row in the parent
query.The subquery, when unnested can
drastically improve the execution time because
the "FILTER" operation is
converted into a join.Be aware that "NOT IN"
and "NOT EXISTS" might
produce different results for "NULL" values.
这一次顾问不会建议任何结构上的更改(如索引),但会通过用 NOT EXISTS 取代 NOT IN的方式很聪明地猜测到调整查询的正确方式。由于两种构造相似但不相同,顾问给出了这种改变的基本原理,并把决定权留给 DBA 或应用程序开发人员,由他们决定该建议是否对环境有效。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接