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)
那么这是否意味着没有必要在索引上创建同义词呢?
如果我们把同义词放在索引上会有负面影响吗 没有必要(毫无意义但无害)在索引上创建同义词,因为任何人都没有理由在代码中引用索引名称。没有人会这样做。在索引上创建同义词是没有必要的(毫无意义但无害的),因为任何人都没有理由在代码中引用索引名称。没有人会这样做。您可以在访问提示中直接引用索引;但是仍然不需要同义词。您可以在访问提示中直接引用索引;但仍然不需要同义词。