新インデックスの検証 その6
<新インデックスの検証 その6> ペンネーム モンキーターン
今回は、Functionインデックスの検証を行なう。
Functionインデックスが、どのような場合に有効に使えるものなのかを検証する。
Oracle8iから、Functionインデックスが導入されたことで、式を含む条件の評
価にインデックスを利用できるようになった。それでは、その性能を検証して
みよう。
検証スタート!!!
SQL> select empno, ename from emp_200man2 where empno*(sal-100) create index func_idx on emp_200man2(empno*(sal-100)) ; create index fun_idx on emp_200man2(empno*(sal-100)) * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています。
あれれれー。エラー発生!!!
Functionインデックスを作成するには権限が必要である。
QUERY REWRITE権限である。( 他のスキーマ内で作成する場合は、GLOBAL QUERY
REWRITE権限 )
それでは、scottユーザに権限を与えて、再度作成してみよう。
SQL> conn system/manager 接続されました。 SQL> grant query rewrite to scott ; 権限付与が成功しました。 SQL> conn scott/tiger 接続されました。 SQL> create index func_idx on emp_200man2(empno*(sal-100)) ; 索引が作成されました。
作成時間 = 1分52.09秒
ちなみに、Functionインデックスではない Normalインデックスは
SQL> create index normal_idx on emp_200man2(empno, sal) ;
作成時間 = 1分04.04秒
これで、O.K!Functionインデックスを作成することができた。
簡単な計算式程度なら、Functionインデックス作成時間にほとんど影響はない
が、式が複雑になればなるほど、Functionインデックスの作成時間は延びるの
である。これだけでは、Functionインデックスを使うことはできない。
Functionインデックスを使用するには、初期化パラメータ
query_rewrite_enabled = true
query_rewrite_integrity = trusted か stale_tolerated
である必要がある。
* query_rewrite_integrityは、Functionインデックスが使用している関数が
ユーザ定義のものでなければ、この設定は必要ない。デフォルト値は、
enforcedなのでユーザ定義関数を使用する場合は、明示的に変更が必要であ
る。今回は、ユーザ定義関数を使用していないため、この初期化パラメータ
は変更しない。
SQL> conn system/manager 接続されました。 SQL> select name, value from v$parameter where name like 'QUERY%' ; レコードが選択されませんでした。 SQL> select name, value from v$parameter where name like 'query%' ; NAME ---------------------------------------------------------------- VALUE ---------------------------------------------------------------- query_rewrite_enabled FALSE query_rewrite_integrity enforced SQL> alter system set query_rewrite_enabled=TRUE ; システムが変更されました。
これで、Functionインデックスを使用することが可能となった。
今回は、Functionインデックスを使用する場合の前提条件について説明した。
次回は、実際にFunctionインデックスを使用した場合の検証を行なう。
次回もお楽しみに・・・つづく
以上 ASIMO(ヒューマノイドロボット)と2ショット写真を取った
茅ヶ崎にて