Dual 表性能优化.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Dual 表性能优化

Dual 表性能优化 Dual 表的性能优化 Dual表示一个特殊的系统,它只有一个字段、一条记录。在我们的代码中,经常会利用它产生一些特殊值,比如系统时间: select sysdate from dual; 正常情况下,以上语句会对dual表做一次全表扫描,产生3 consistent gets。这是一个很小的数值。但是如果放在一个大循环内,就会产生非常大的consistent gets(实际上,我们的系统就出现过这样的问题)。 如何来优化它呢,consistent gets即时只降低1,在一个大循环中都将会是一个非常大值。首先看一下sql trace: SQL select sysdate from dual; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 TABLE ACCESS (FULL) OF DUAL Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 3 consistent gets 0 physical reads ... ... 1 rows processed 发现对表进行了全表扫描。是否可以考虑通过一个索引来避免呢? SQL connect sys/sys as sysdba Connected. SQL SQL create table T_DUAL(DUMMY VARCHAR2(1)); Table created. SQL SQL insert into t_dual values (X); 1 row created. SQL commit; Commit complete. SQL SQL create index t_dual_idx on t_dual(dummy); Index created. SQL analyze table t_dual compute statistics for table for all indexes for all indexed columns; Table analyzed. SQL create view x_$dual as select * from t_dual where dummy=X; View created. SQL grant select on x_$dual to public; Grant succeeded. SQL connect demo/demo Connected. SQL create synonym DUAL for sys.x_$dual ; Synonym created. 看看优化结果: SQL set autot trace SQL select sysdate from dual; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=1) 1 0 INDEX (RANGE SCAN) OF T_DDUAL_IDX (NON-UNIQUE) (Cost=1 Card=1 Bytes=1) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 1 consistent gets ... ... 1 rows processed 效果不错!从3降到了1! 但是,为了使用到索引,在视图定义中使用了” where dummy=X”的条件(哈哈,注意,dummy为not null时不要条件也能使用到索引)。这会给我们的程序带来一定风险。能否避免它呢?当然可以!建立索引组织表试试: SQL set autot off SQL drop sy

文档评论(0)

htfyzc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档