在不同用户下创建的索引

时间:2014-10-15 19:30:53

标签: oracle oracle11g

我在一个表列上创建了一个索引作为sys用户,因为我没有提到它在sys模式下创建的模式名称。当我作为具有对表的读访问权限的不同用户运行查询时,我没有看到正在使用的索引。如果索引是在不同的模式下创建的,请告诉我是否在oracle中忽略索引?

2 个答案:

答案 0 :(得分:2)

没有特定于索引对象的权限。所以,就我自己而言,我会说索引将被自动使用 - 即使它在不同的模式中。但是,由于对链接答案的评论引起了怀疑,我使用oracle 11g进行了实验:

用户 sonia

SQL> create table t as (select level n from dual connect by level < 100);
Table created.

SQL> explain plan for select * from sonia.t where n < 10;
SQL> @UTLXPLS.SQL

TABLE ACCESS FULL T
SELECT STATEMENT

SQL> grant select on t to sylvain;
Grant succeeded.

用户 sylvain

SQL> explain plan for select * from sonia.t where n < 10;
Explained.

SQL> @UTLXPLS.SQL

TABLE ACCESS FULL T
SELECT STATEMENT

SQL> create index syl_idx on sonia.t(n);
Index created.

SQL> explain plan for select * from sonia.t where n < 10;
Explained.

SQL> @UTLXPLS.SQL

INDEX RANGE SCAN SYL_IDX
SELECT STATEMENT

返回 sonia

SQL> explain plan for select * from sonia.t where n < 10;
Explained.

SQL> @UTLXPLS.SQL

INDEX RANGE SCAN SYL_IDX
SELECT STATEMENT

如您所见,从{em>查询表时,都使用SYL_IDX(在 sylvain 模式中创建的 sonia.t 上的索引) sonia 和来自 sylvain 。在表上拥有选择权限就足够了。

答案 1 :(得分:1)

不,不应该被忽视。优化器可能会考虑其他原因不使用索引。

很容易检查您是否可以在不同的架构中使用索引:

-- Connected as power_user
SQL> CREATE TABLE some_user.a_table (a_field INTEGER);
Table created

SQL> INSERT INTO some_user.a_table
  2  SELECT rownum FROM dual CONNECT BY level <= 10000;
10000 rows inserted

SQL> CREATE INDEX power_user.an_index ON some_user.a_table (a_field);
Index created

-- Connected as some_user
SQL> select * from some_user.a_table where a_field = 50;

   A_FIELD
----------
        50


Execution Plan
----------------------------------------------------------
Plan hash value: 573181184

-----------------------------------------------------------------------------
| Id  | Operation        | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |          |     1 |    13 |     1   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| AN_INDEX |     1 |    13 |     1   (0)| 00:00:01 |
-----------------------------------------------------------------------------