ORACLE应用中常见的傻瓜问题1000问(五)

文章作者 100test 发表时间 2007:03:14 13:46:50
来源 100Test.Com百考试题网


大家在应用oracle的时候可能会遇到很多看起来不难的问题, 特别对新手来说, 今天我简单把它总结一下, 发布给大家, 希望对大家有帮助! 和大家一起探讨, 共同进步!



  之前更多信息,参看《oracle应用常见傻瓜问题1000问之四》

  本讲主要讲的是sql语句的优化方法! 主要基于oracle9i的.

  174. /* all_rows*/

  表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化.例如:
0select /* all _rows*/ emp_no,emp_nam,dat_in from bsempms where emp_no= ccbzzp .

  175. /* first_rows*/

  表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.例如:
0select /* first_rows*/ emp_no,emp_nam,dat_in from bsempms where emp_no= ccbzzp .

  176. /* choose*/

  表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量.表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法.例如:
0select /* choose*/ emp_no,emp_nam,dat_in from bsempms where emp_no= ccbzzp .

  177. /* rule*/

  表明对语句块选择基于规则的优化方法.例如:
0select /* rule */ emp_no,emp_nam,dat_in from bsempms where emp_no= ccbzzp .

  178. /* full(table)*/

  表明对表选择全局扫描的方法.例如:
0select /* full(a)*/ emp_no,emp_nam from bsempms a where emp_no= ccbzzp .

  179. /* rowid(table)*/

  提示明确表明对指定表根据rowid进行访问.例如:
0select /* rowid(bsempms)*/ * from bsempms where rowid>= aaaaaaaaaaaaaa
and emp_no= ccbzzp .

  180. /* cluster(table)*/
 
  提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.例如:
0select /* cluster */ bsempms.emp_no,dpt_no from bsempms,bsdptms
where dpt_no= tec304 and bsempms.dpt_no=bsdptms.dpt_no.

  181. /* index(table index_name)*/

  表明对表选择索引的扫描方法.例如:
0select /* index(bsempms sex_index) use sex_index because there are fewmale bsempms */ from bsempms where sex= m .

  182. /* index_asc(table index_name)*/

  表明对表选择索引升序的扫描方法.例如:
0select /* index_asc(bsempms pk_bsempms) */ from bsempms where dpt_no= ccbzzp .

  183. /* index_combine*/

  为指定表选择位图访问路经,如果index_combine中没有提供作为参数的索引,将选择出位图索引的布尔组合方式.例如:
0select /* index_combine(bsempms sal_bmi hiredate_bmi)*/ * from bsempms
where sal<5000000 and hiredate
  184. /* index_join(table index_name)*/

  提示明确命令优化器使用索引作为访问路径.例如:
0select /* index_join(bsempms sal_hmi hiredate_bmi)*/ sal,hiredate
from bsempms where sal<60000.

  185. /* index_desc(table index_name)*/

  表明对表选择索引降序的扫描方法.例如:
0select /* index_desc(bsempms pk_bsempms) */ from bsempms where dpt_no= ccbzzp .

  186. /* index_ffs(table index_name)*/

  对指定的表执行快速全索引扫描,而不是全表扫描的办法.例如:
0select /* index_ffs(bsempms in_empnam)*/ * from bsempms where dpt_no= tec305 .

  187. /* add_equal table index_nam1,index_nam2,...*/

  提示明确进行执行规划的选择,将几个单列索引的扫描合起来.例如:
0select /* index_ffs(bsempms in_dptno,in_empno,in_sex)*/ * from bsempms where emp_no= ccbzzp and dpt_no= tdc306 .

  188. /* use_concat*/

  对查询中的where后面的or条件进行转换为union all的组合查询.例如:
0select /* use_concat*/ * from bsempms where dpt_no= tdc506 and sex= m .

  189. /* no_expand*/

  对于where后面的or 或者in-list的查询语句,no_expand将阻止其基于优化器对其进行扩展.例如:
0select /* no_expand*/ * from bsempms where dpt_no= tdc506 and sex= m .

  190. /* nowrite*/

  禁止对查询块的查询重写操作.

  191. /* rewrite*/

  可以将视图作为参数.

  192. /* merge(table)*/

  能够对视图的各个查询进行相应的合并.例如:
0select /* merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (selet dpt_no
,avg(sal) as avg_sal from bsempms b group by dpt_no) v where a.dpt_no=v.dpt_no
and a.sal>v.avg_sal.

  193. /* no_merge(table)*/

  对于有可合并的视图不再合并.例如:
0select /* no_merge(v) */ a.emp_no,a.emp_nam,b.dpt_no from bsempms a (selet dpt_no


相关文章


ORACLE考试1Z0-001:SQLandPL_SQL大纲
基于OracleADF的应用程序开发过程(2)
ORACLE考试Oracle8i:备份与恢复大纲
ASP.NET2.0实现依赖Oracle的缓存策略
ORACLE应用中常见的傻瓜问题1000问(五)
Oracle数据库基本知识及问题解决
如何掌握Oracle中的时间间隔型数据(1)
ORACLE考试Oracle8i:性能及其调优大纲
如何掌握Oracle中的时间间隔型数据(2)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛