インデックス(index)とは、表を効率よく検索するための”索引”です。
日常生活で多く使われています。
例えば、本を使ってある語句を調べる際に、本の末尾にある索引から目的の語句が記載されているページの情報を得る、といったものです。
索引を使うことで素早く情報を得られることは容易に理解できると思います。
Oracle内にある大量のデータが保管されている表を検索するとき、どうすれば早く検索できるでしょうか。
そう、検索に表そのものではなく、インデックスを利用すれば良いのです。
基本的にデータベースの行は、規則性のない並び方をしているのだから、規則的に並べられたデータであるインデックスを利用することで、検索の時間が短縮される、という考え方です。
■インデックスの設定
SQL> CREATE INDEX インデックス名 ON 表名(列名);
例)
SQL> desc 社員;
名前 NULL? 型
----------------------------------------------------------------- -------- --------------------------------------------
社員番号 NOT NULL NUMBER(4)
社員名 VARCHAR2(10)
職務 VARCHAR2(9)
上司 NUMBER(4)
入社日 DATE
給与 NUMBER(9)
歩合給 NUMBER(9)
部門番号 NUMBER(2)
SQL> CREATE INDEX PK_社員 ON 社員(社員番号);
■インデックスの削除
SQL> DROP INDEX インデックス名;
例)
SQL> DROP INDEX PK_社員;
■インデックスの再構築
索引は、表からは独立していますが、Oracleによって自動的に維持されます。
つまり、表にデータが挿入されれば、索引にも自動的に値が入ります。
そのさいにOracleは検索のしやすい、バランスのよい構造を作ろうと頑張ってくれます。
しかし、何度も更新されることで、次第にアンバランスで検索に時間がかかる索引になります。
そこで、元のバランスの良い索引に戻すための仕組みが ”インデックスの再構築” です。
SQL> ALTER INDEX インデックス名 REBUILD ONLINE;
例)
SQL> ALTER INDEX PK_社員 REBUILD ONLINE;
索引が変更されました。
気になるのは、どのタイミングでインデックスを再構築するか、ではないでしょうか。
http://www.itmedia.co.jp/enterprise/articles/0606/02/news106.html
なるほど。
■使用していないインデックスの検出方法
http://blogs.oracle.com/oracle4engineer/entry/index
インデックスの増加はパフォーマンスの低下にもつながります。
監視してみて、あるインデックスが使用されないと分かれば、削除していくことも考える必要があります。
0 件のコメント:
コメントを投稿