tshizuku03の日記

主にoracleやLinuxコマンドについての記事を載せていきたいと思っています。

簡単にインデックスの効果を検証する

インビジブルインデックスの使い方

説明

--初期化パラメータOPTIMIZER_USE_INVISIBLE_INDEXESの確認

SQL>SHOW PARAMETER OPTIMIZER_USE_INVISIBLE_INDEXES
VALUE:FALSE → INVISIBLE属性のインデックスはオプティマイザによる検証対象外。デフォルト
VALUE:TRUE → インビジブルインデックスは通常の索引として検討

 

1.チューニング対象SQLへの効果計測が目的の場合
USE_INVISIBLE_INDEXESヒントを使用してSQLレベルでインビジブルインデックスを使用。
2.インデックス追加時の他SQLを含めた実行計画変化の確認が目的の場合
ALTER SESSION文でOPTIMIZER_USE_INVISIBLE_INDEXESをTRUEに設定することで、セッションレベルでインビジブルインデックスを使用可能状態にし、対象テーブルにアクセスするSQLを検証する

 

 

 --1.初期化パラメータOPTIMIZER_USE_INVISIBLE_INDEXの確認

SQL>SHOW PARAMERTER TOTIMIZER_USE_INVISIBLE_INDEXE
VALEU:FALSE インビジブルインデックス対象外
VALEU:TURE インビジブルインデックスは通常の索引として検討 

--2.SELECT文実行

 

--3.統計情報表示
--DISPLAY_CURSOR:セッションで最後に実行された文の実行計画を表示
--ALLSTATS LAST:最後の実行に対する統計情報のみを表示

SQL>SET PAGESIZE 0

SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));


--4.初期化パラメータFALSEの場合、ヒント句USE_INVISIBLE_INDEXESを指定してインビジブルインデックスをSQLレベルで使用
SQL>SELECT /*+ USE_INVISIBLE_INDEXES(インデックス名) */ 〜・・・FROM テーブル名 WHERE 〜;
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ALLSTATS LAST'));