当前位置: 网学 > 编程文档 > ORACLE > 正文

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

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/19
下载{$ArticleTitle}原创论文样式
 虽然EMPNO是唯一性索引,但是由于它所做的是范围比较, 等级要比非唯一性索引的等式比较低!

5. 强制索引失效

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

  举例:

  SELECT ENAME
  FROM EMP
  WHERE EMPNO = 7935
  AND DEPTNO + 0 = 10 /*DEPTNO上的索引将失效*/
  AND EMP_TYPE || ‘’ = ‘A’ /*EMP_TYPE上的索引将失效*/

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

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

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

  SELECT ENAME
  FROM EMP
  WHERE EMP_TYPE = ‘A’
  AND EMP_CLASS = ‘X’;

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

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

  SELECT ENAME
  FROM EMP
  WHERE EMP_TYPE = ‘A’
  AND EMP_CLASS||‘’ = ‘X’;

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号