しらなかったのですが、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 件のコメント:
コメントを投稿