【问题标题】:Do Indexes need a Synonym to be used索引是否需要使用同义词
【发布时间】:2023-03-15 02:15:01
【问题描述】:

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

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)

那么这是否意味着没有必要在索引上创建同义词? 如果我们将同义词放在索引上会不会产生负面影响?

【问题讨论】:

    标签: sql oracle indexing


    【解决方案1】:

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

    【讨论】:

    • 您可以在访问提示中直接引用索引;但仍然不需要同义词。
    猜你喜欢
    • 2018-03-10
    • 2012-04-22
    • 2013-08-07
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多