简介Oracle INDEX提示

数据库 Oracle
这里介绍如果你只为某个表指定了Oracle INDEX提示(指示存取路径在该表上使用索引),优化器需要来决定其它应该使用的访问路径和相应的连接方法。

Oracle还是比较常用的,于是我研究了一下Oracle INDEX提示,当使用hints时,在某些情况下,为了确保让优化器产生***的执行计划,我们可能指定全套的hints,在这里拿出来和大家分享一下,希望对大家有用。

例如,如果有一个复杂的查询,包含多个表连接,如果你只为某个表指定了Oracle INDEX提示(指示存取路径在该表上使用索引),优化器需要来决定其它应该使用的访问路径和相应的连接方法。因此,即使你给出了一个Oracle INDEX提示,优化器可能觉得没有必要使用该提示。这是由于我们让优化器选择了其它连接方法和存取路径,而基于这些连接方法和存取路径,优化器认为用户给出的Oracle INDEX提示无用。为了防止这种情况,我们要使用全套的hints,如:不但指定要使用的索引,而且也指定连接的方法与连接的顺序等。

下面是一个使用全套hints的例子,ORDERED提示指出了连接的顺序,而且为不同的表指定了连接方法:

  1. SELECT /*+ ORDERED INDEX (b, jl_br_balances_n1) USE_NL (j b)  
  2. USE_NL (glcc glf) USE_MERGE (gp gsb) */  
  3. b.application_id, b.set_of_books_id ,  
  4. b.personnel_id, p.vendor_id Personnel,  
  5. p.segment1 PersonnelNumber, p.vendor_name Name  
  6. FROM jl_br_journals j, jl_br_balances b,  
  7. gl_code_combinations glcc, fnd_flex_values_vl glf,  
  8. gl_periods gp, gl_sets_of_books gsb, po_vendors p  
  9. WHERE ... 

指示优化器的方法与目标的hints:

  1. ALL_ROWS -- 基于代价的优化器,以吞吐量为目标  
  2. FIRST_ROWS(n) -- 基于代价的优化器,以响应时间为目标  
  3. CHOOSE -- 根据是否有统计信息,选择不同的优化器  
  4. RULE -- 使用基于规则的优化器 

例子:

  1. SELECT /*+ FIRST_ROWS(10) */ employee_id, last_name, salary, job_id  
  2. FROM employees  
  3. WHERE department_id = 20;  
  4. SELECT /*+ CHOOSE */ employee_id, last_name, salary, job_id  
  5. FROM employees  
  6. WHERE employee_id = 7566;  
  7. SELECT /*+ RULE */ employee_id, last_name, salary, job_id  
  8. FROM employees  
  9. WHERE employee_id = 7566

【编辑推荐】

  1. 讨论Oracle文档学习经验
  2. 如何了解Oracle生成执行计划
  3. 详细谈论Oracle表连接
  4. 分析Oracle索引扫描四大类
  5. 高手闲谈Oracle索引扫描
责任编辑:佚名 来源: 51cto.com
相关推荐

2009-11-18 16:43:59

2009-11-19 11:00:55

Oracle xmlt

2010-10-28 10:54:46

oracle对象权限

2010-10-25 17:28:05

Oracle bita

2010-11-15 12:02:24

Oracle进程结构

2010-11-19 16:03:20

Oracle分析表

2010-10-25 15:12:42

Oracle日期函数

2011-04-12 13:27:09

Oracle日期函数

2010-10-25 17:39:24

Oracle单行日期函

2010-11-18 13:09:19

Oracle case

2023-10-11 06:50:32

Oracle数据库系统

2015-08-21 12:59:38

Oracle数据库

2010-10-26 11:39:51

Oracle EXPIMP备份

2010-10-26 17:41:05

Oracle索引

2010-10-25 14:47:49

Oracle系统变量函

2023-11-03 08:57:20

MySQL索引

2010-04-27 12:51:49

Oracle 函数de

2010-05-05 16:30:25

Oracle后台进程

2010-04-08 18:33:46

Oracle VARR

2010-04-08 16:41:29

Oracle存储过程
点赞
收藏

51CTO技术栈公众号