oracle – 在不同用户下创建的索引

前端之家收集整理的这篇文章主要介绍了oracle – 在不同用户下创建的索引前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个表列上创建了一个索引作为sys用户,因为我没有提到它在sys模式下创建的模式名称.当我作为具有对表的读访问权限的不同用户运行查询时,我没有看到正在使用的索引.如果索引是在不同的模式下创建的,请告诉我是否在oracle中忽略索引?

解决方法

没有特定于索引对象的权限.所以,就我自己而言,我会说索引将被自动使用 – 即使它在不同的模式中.但是,由于对链接答案的评论提出疑问,我使用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

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

猜你在找的Oracle相关文章