加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – Oracle会在哪些情况下自动创建索引?

发布时间:2020-12-12 07:05:54 所属栏目:MsSql教程 来源:网络整理
导读:据我所知( this page)Oracle为每个UNIQUE或PRIMARY KEY声明自动创建一个索引。这是Oracle中自动创建索引的完整列表吗? 解决方法 首先,当我们创建主键或唯一键时,Oracle并不总是创建一个索引。如果该列上已经有一个索引,它会改为使用它… SQL create table
据我所知( this page)Oracle为每个UNIQUE或PRIMARY KEY声明自动创建一个索引。这是Oracle中自动创建索引的完整列表吗?

解决方法

首先,当我们创建主键或唯一键时,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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读