てぃぐれのプログラマwiki

ワクワクに従う

ORACLE 勝手に作られる索引

 ORACLEデータベースには勝手とは言わないまでも、自動で作成される索引があるのは知っていましたか?。ちなみに19cのAutomatic indexingの話ではありません。それはテーブル制約である、主キーもしく一意制約を付けると自動的に索引が作成されるのです。実際、ORACLE索引の管理にも「キーおよび一意キーには自動的に索引が作成されます...」という記述がありますね。実際に確認してみましょう。

 

例)

CREATE TABLE tig
 (
 id VARCHAR2(10),
 name VARCHAR2(50),
 gender NUMBER(1,0),
 CONSTRAINT pk1 PRIMARY KEY(id),
 CONSTRAINT uk1 UNIQUE(name)
 ) 

select * from user_indexes; --索引表示

user_indexes

実行結果

確かに索引が作成されていることが分かりますね。さて、最後はおまけでテーブルをdropして、索引も消えることを確認してみます。

 

drop table tig;

select * from user_indexes; 

結果はno data found ということで、索引も一緒にドロップされました。ということで、今回は制約追加により、自動的に作成される索引があるということを見ていきました。

 

さらなる余談ですが、drop後にフラッシュバックドロップを行い、テーブルを戻した場合、索引は戻るか見てみます。

flashback table tig to before drop;

f:id:tigretic:20211210173226p:plain

 

戻っている??比較してみるとINDEX_NAMEが変わっていますね。この辺の検証はまた今度、取り上げて見たいと思います。

 

※ちなみに外部キーによる索引は自動作成されません

※フラッシュバックドロップをしても外部キーは戻ってこないぞ