- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 北京市第四中学2024-2025学年高二上学期期中考试化学试卷(含答案).docx VIP
- 电动自行车用锂离子电池和电池组 技术规范.docx VIP
- 胃肠疾病的超声诊断答案-2025年度华医网继续教育.docx VIP
- 英文电影赏析(共46张精品课件).ppt VIP
- 人工智能在医疗行业的应用PPT .pptx
- 小学道德与法治五年级上册第四单元《骄人祖先-灿烂文化》整体教学设计.docx
- 坏死性筋膜炎.ppt
- 网络操作系统(Windows Server 2008)课件(共13单元)项目8、配置DNS服务器.ppt VIP
- 10S505柔性接口给水管道支墩图集.docx
- 一种用随机点尿来评估高血压患者每日食盐量的方法.pdf VIP
文档评论(0)