索引需要使用同义词



我注意到即使没有当前模式的同义词,索引仍在使用。我在下面进行了测试:

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)

那么,这是否意味着在索引上创建同义词的不必要?如果我们对索引提出同义词,会产生负面影响吗?

在索引上创建同义词是不必要的(毫无意义但无害的(,因为没有任何人在其代码中引用索引名称。没有人做。

最新更新