WEB开发网
开发学院数据库Oracle Oracle语句优化规则汇总(6) 阅读

Oracle语句优化规则汇总(6)

 2008-02-19 12:40:40 来源:WEB开发网   
核心提示: 虽然EMPNO是唯一性索引,但是由于它所做的是范围比较,Oracle语句优化规则汇总(6)(3), 等级要比非唯一性索引的等式比较低!5. 强制索引失效如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它, 在这种情况下,你希望使优化器屏蔽掉EMP_CL

虽然EMPNO是唯一性索引,但是由于它所做的是范围比较, 等级要比非唯一性索引的等式比较低!

5. 强制索引失效

如果两个或以上索引具有相同的等级,你可以强制命令ORACLE优化器使用其中的一个(通过它,检索出的记录数量少) .

举例:

  SELECTENAME
  FROMEMP
  WHEREEMPNO=7935
  ANDDEPTNO+0=10/*DEPTNO上的索引将失效*/
  ANDEMP_TYPE||‘’=‘A’/*EMP_TYPE上的索引将失效*/

这是一种相当直接的提高查询效率的办法。 但是你必须谨慎考虑这种策略,一般来说,只有在你希望单独优化几个SQL时才能采用它。

这里有一个例子关于何时采用这种策略,

假设在EMP表的EMP_TYPE列上有一个非唯一性的索引而EMP_CLASS上没有索引。

  SELECTENAME
  FROMEMP
  WHEREEMP_TYPE=‘A’
  ANDEMP_CLASS=‘X’;

优化器会注意到EMP_TYPE上的索引并使用它。 这是目前唯一的选择。 如果,一段时间以后, 另一个非唯一性建立在EMP_CLASS上,优化器必须对两个索引进行选择,在通常情况下,优化器将使用两个索引并在他们的结果集合上执行排序及合并。 然而,如果其中一个索引(EMP_TYPE)接近于唯一性而另一个索引(EMP_CLASS)上有几千个重复的值。 排序及合并就会成为一种不必要的负担。 在这种情况下,你希望使优化器屏蔽掉EMP_CLASS索引。

用下面的方案就可以解决问题。

  SELECTENAME
  FROMEMP
  WHEREEMP_TYPE=‘A’
  ANDEMP_CLASS||‘’=‘X’;

上一页  1 2 3 

Tags:Oracle 语句 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接