oracle - 不同用户下创建的索引

标签 oracle oracle11g

我作为 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/

相关文章:

sql - 在 Oracle 中执行 SQL 查询时出错

oracle - 无法将日期数据插入到 oracle 表中

oracle - 修复 Oracle 4000 字符中允许的最大长度

linux - 在 Centos 上安装 Oracle 11g

mysql - oracle查询中如何去除重复记录

oracle - EXCEPTION block 内将使用哪些 PRAGMA 语句?

引用似乎不存在的约束的 Oracle 唯一约束冲突

sql - 在 Oracle DB 中按顺序获取列名

Oracle 查询 - 优化

oracle - 尝试从 SQL Developer 导出时,SPOOL 返回空文件