ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 查询访问同一表的两个以上索引(一)

查询访问同一表的两个以上索引(一)

原创 Linux操作系统 作者:willing66 时间:2010-05-07 12:45:16 0 删除 编辑
查询访问同一表的两个以上索引(一)

引自:http://space.itpub.net/?uid-4227-action-viewspace-itemid-661830

经常看到有人提出这样的疑问,我在同一张表上建立了多个索引,为什 么Oracle每次都选择一个,而不能同时利用多个索引呢。一般来说,常见的访问同一张表的两个以 上索引,存在三种情况,AND-EQUAL、INDEX HASH JOIN和BITMAP INDEX AND/OR。

此外,还有一个设计上的疑问,如果有A、B、C三个字段,都可能作为查询条件,是建立多个复合索 引好,还是建立三个单列的索引。这个问题之所以不好回答是因为和业务或者说和查询的模式有很大的关系,不过如果理解了Oracle什么时候会选择一个以上的索引来访问表,就会对于理解如何设计合理的索引有很大的帮助。

简单介绍一下AND-EQUAL执行计划。

 

 

首先建立一个测试表:

SQL> CREATE TABLE T_DOUBLE_INDITPUB个人空间"}0L/If#|){9fN
  2  (ID NUMBER,ITPUB个人空间3i:j1DX`|o
  3  NAME VARCHAR2(30),ITPUB个人空间;gc- l8_%b5@4u*P
  4  TYPE VARCHAR2(30),
b%wM5j&S-T-]0  5  CONTENTS VARCHAR2(4000));

Table created.

SQL> INSERT INTO T_DOUBLE_INDITPUB个人空间]2OYM.@
  2  SELECT ROWNUM,ITPUB个人空间ryf&g bbB
  3  OBJECT_NAME,
xx5mcuQMm0  4  OBJECT_TYPE,ITPUB个人空间3GyMBsy9M W*A0u
  5  LPAD('A', 1000, 'A')
\*|4Y:u H}q"n0  6  FROM DBA_OBJECTS;

75856 rows created.

SQL> COMMIT;

Commit complete.

SQL> CREATE INDEX IND_DOUBLE_NAME
nMfL*s z/J0  2  ON T_DOUBLE_IND (NAME);

Index created.

SQL> CREATE INDEX IND_DOUBLE_TYPEITPUB个人空间@^b

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/276487/viewspace-662128/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-22

  • 博文量
    100
  • 访问量
    183659