我注意到索引仍在使用,即使它们没有当前架构的同义词。 我在下面进行了测试:
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)
这是否意味着不必在索引上创建同义词? 如果我们将同义词放在索引上会有负面影响吗?
答案 0 :(得分:3)
在索引上创建同义词是不必要的(无意义但无害),因为没有理由让任何人在其代码中引用索引名称。从来没有人这样做过。