2009年1月28日水曜日

Oracle Virtual Index

しらなかったのですが、Oracleの隠しパラメータに
_use_nosegment_indexesというものがあり、
それを使うと、Virtual Indexとやらを使えるらしいです。

Virtual Index ・・・なんだそりゃ?
調べてみると

CREATE INDEX インデックス名 ON テーブル名(カラム名) NOSEGMENT;
※NOSEGMENTをつけるとVirtual Indexになるらしい。

とりあえず、作ってディクショナリ検索!

SELECT * FROM USER_OBJECTS; ← 出た。(※1)
SELECT * FROM USER_INDEXES; ← 出ない!
SELECT * FROM USER_SEGMENTS; ← 出ない!

で、使い方はというと、
sqlplus
SQL> alter session set "_use_nosegment_indexes" = true;
SQL> set autotrace traceonly;
SQL> 実行計画をチェックしたいSQLを実行;
おお、確かにINDEX検索の実行計画が取れた。
・・・
v$sql_planはどうだろう?あ、FULL検索になってるー。
ということは、sqlplus のautotraceの
表示上INDEX検索にして、実際には、
FULL検索しているということか?
(どうりで、osqlEditで実行計画を取ると FULL検索しか取れなかった訳だ。)

※1:osqlEditのオブジェクトのリスト(typeでINDEX選択)   
   には出ないが、TABLE選択後のINDEXタグには   
   出てきた。(参照しているディクショナリを変えてそう)

0 件のコメント:

コメントを投稿