Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 索引是否需要使用同义词_Sql_Oracle_Indexing - Fatal编程技术网

Sql 索引是否需要使用同义词

Sql 索引是否需要使用同义词,sql,oracle,indexing,Sql,Oracle,Indexing,我注意到索引仍然在使用,即使它们与当前模式没有同义词。 我运行了以下测试: SHOW USER; ---------------- USER is "APPS" 在不同架构下创建表HRCUST create table hrcust.test_idx_tbl ( id number , data1 varchar2(100) , data2 varchar2(100) ); 为自定义表创建了同义词 create synonym apps.test_idx_

我注意到索引仍然在使用,即使它们与当前模式没有同义词。 我运行了以下测试:

SHOW USER;

----------------
USER is "APPS"
在不同架构下创建表
HRCUST

create table hrcust.test_idx_tbl
(
    id      number
,   data1   varchar2(100)
,   data2   varchar2(100)
);
为自定义表创建了同义词

create synonym apps.test_idx_tbl for hrcust.test_idx_tbl;
在其他架构下创建了索引:

create index hrcust.test_idx_idx on hrcust.test_idx_tbl(id);
插入了一些虚拟值:

begin

    for i in 1..10000 loop

        insert into hrcust.test_idx_tbl
        (
            id    
        ,   data1 
        ,   data2 
        )
        values
        (
            i
        ,   'data'||i
        ,   'data'||i
        );

    end loop;

end;    
检查解释计划,即使我明确使用了
APPS
同义词,它仍然使用索引

select  *
from    apps.test_idx_tbl
where   id = 1;

Plan hash value: 3233418199

--------------------------------------------------------------------------------------------
| Id  | Operation                   | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |              |     1 |   117 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| TEST_IDX_TBL |     1 |   117 |     1   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | TEST_IDX_IDX |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID"=1)
那么这是否意味着没有必要在索引上创建同义词呢?
如果我们把同义词放在索引上会有负面影响吗

没有必要(毫无意义但无害)在索引上创建同义词,因为任何人都没有理由在代码中引用索引名称。没有人会这样做。

在索引上创建同义词是没有必要的(毫无意义但无害的),因为任何人都没有理由在代码中引用索引名称。没有人会这样做。

您可以在访问提示中直接引用索引;但是仍然不需要同义词。您可以在访问提示中直接引用索引;但仍然不需要同义词。