我在一个表列上创建了一个索引作为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的索引).拥有表的选择权限就足够了.