我作为 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
回到索尼娅:
SQL> explain plan for select * from sonia.t where n < 10;
Explained.
SQL> @UTLXPLS.SQL
INDEX RANGE SCAN SYL_IDX
SELECT STATEMENT
如您所见,
SYL_IDX
(在 sylvain 模式中创建的 sonia.t 上的索引)用于从 sonia 和 sylvain 查询表。拥有对表的选择权限就足够了。
关于oracle - 不同用户下创建的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390588/