source

어떤 경우에 Oracle은 자동으로 인덱스를 생성합니까?

nicesource 2023. 6. 8. 19:51
반응형

어떤 경우에 Oracle은 자동으로 인덱스를 생성합니까?

제가 알기로는( 페이지) Oracle은 각 UNIKEY 또는 Primary KEY 선언에 대한 인덱스를 자동으로 생성합니다.오라클에서 인덱스가 자동으로 생성되는 경우의 전체 목록입니까?

저는 주어진 답변을 통합하여 커뮤니티 위키로 만들겠습니다.
따라서 Oracle은 다음과 같은 경우에 대해 인덱스를 자동으로 생성합니다.

  1. APC: 기본 키 및 고유 키에 대한 인덱스가 이미 존재하지 않는 경우.
  2. APC: LOB 스토리지 및 XMLType용.
  3. 게리: 중첩 테이블이 있는 테이블입니다.
  4. 허드슨:구체화된 보기.

첫째, Oracle은 기본 키 또는 고유 키를 생성할 때 항상 인덱스를 생성하지 않습니다.해당 열에 이미 인덱스가 있는 경우 대신 인덱스를 사용합니다.

SQL> create table t23 (id number not null)
  2  /

Table created.

SQL> create index my_manual_idx on t23 ( id )
  2  /

Index created.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX

SQL> 

을 주의하여 보다MY_MANUAL_IDX고유한 인덱스가 아닙니다. 중요하지 않습니다.

SQL> alter table t23
  2      add constraint t23_pk primary key (id) using index
  3  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX

SQL> drop index my_manual_idx
  2  /
drop index my_manual_idx
           *
ERROR at line 1:
ORA-02429: cannot drop index used for enforcement of unique/primary key


SQL> 

Oracle이 인덱스를 자동으로 생성하는 또 다른 경우가 있습니다. LOB 스토리지...

SQL> alter table t23
  2      add txt clob
  3      lob (txt) store as basicfile t23_txt (tablespace users)
  4  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$

SQL>

편집을

데이터베이스는 XMLType을 다른 LOB와 동일하게 처리합니다.

SQL> alter table t23
  2      add xmldoc xmltype
  3  /

Table altered.

SQL> select index_name from user_indexes
  2  where table_name = 'T23'
  3  /

INDEX_NAME
------------------------------
MY_MANUAL_IDX
SYS_IL0000556081C00002$$
SYS_IL0000556081C00004$$

SQL>    

아니요, 점점 가까워지고 있지만 아직 완전한 목록은 아닙니다.

또한 Oracle은 빠른 새로 고침을 수행할 때 행을 신속하게 식별할 수 있어야 하므로 구체화된 보기를 작성할 때 자동으로 인덱스가 생성됩니다.rowid 기반 구체화 보기의 경우 I_SNAP$_tablename을 사용합니다.기본 키 구체화 보기의 경우 고유하게 만들기 위해 필요에 따라 수정된 원래 PK 이름을 사용합니다.

create materialized view testmv 
refresh force with rowid
as select * from dual;

select index_name from user_indexes where table_name = 'TESTMV';

Index Name
--------------
I_SNAP$_TESTMV

또 다른 예로, 중첩된 테이블로 테이블을 만들면 자동으로 인덱스가 만들어집니다.숨겨진 테이블이 생성될 수 있으므로 일반적으로 개체 기반 스토리지에서 이 작업을 수행할 수 있습니다.

스키마 기반 XMLTypes도 할 수 있을 것 같습니다.

네, 그것이 전체 목록입니다.Oracle은 각 고유 또는 기본 키 선언에 대한 인덱스를 자동으로 생성합니다.

언급URL : https://stackoverflow.com/questions/2154091/in-which-cases-will-oracle-create-indexes-automatically

반응형