この章では、式データの索引付けに使用するSQLのEVALUATE
演算子およびSQL文のリファレンス情報を提供します。表16-1に、文とその説明を示します。SQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
表16-1 式フィルタ索引の作成および使用文
文 | 説明 |
---|---|
|
式セットを指定のデータ項目またはデータ項目の表と照合します。 |
|
式フィルタ索引を再作成します。 |
|
式フィルタ索引の名前を変更します。 |
|
式を格納する列に式フィルタ索引を作成します。 |
|
式フィルタ索引を削除します。 |
EVALUATE
演算子をSQL文のWHERE
句に使用して、格納されている式を受け取ったデータ項目と比較します。
評価する式はExpression列に格納されます。このExpression列は、ユーザー表のVARCHAR2
列に属性セットを割り当てて作成します。
書式
EVALUATE (expression_column, <dataitem>) <dataitem> := <varchar_dataitem> | <anydata_dataitem> <varchar_dataitem> := attribute_name => attribute_value {, attribute_name => attribute_value} <anydata_dataitem> := AnyData.convertObject(attribute_set_instance)
キーワードとパラメータ
式を格納する列の名前。
対応する属性セットからの属性の名前。
属性の値。
対応する属性セットに関連したオブジェクト型のインスタンス。
戻り値
EVALUATE
演算子は、データ項目と一致する式については1を、一致しない式については0を戻します。Expression列に格納されているNULL値の場合、EVALUATE
演算子はNULL
を戻します。
使用上の注意
EVALUATE
演算子はSQL文のWHERE
句に使用できます。式を格納する列に式フィルタ索引が定義されている場合、その列のEVALUATE
演算子は使用コストに基づいて式セットの評価に索引を使用できます。EVALUATE
演算子は、式の格納表とそれに対応するデータ項目の格納表の間の結合述語として使用できます。
属性セット内のすべての要素属性の値を読取り可能な値(VARCHAR
、DATE
およびNUMBER
データ型に格納されている値など)として表すことができ、コンストラクタが文字列形式の場合は、データ項目を属性の名前/値ペアの文字列として書式指定できます。データ項目の要素属性値のいずれにもコンストラクタが不要な場合は、その属性セットに関連付けられているオブジェクト型の2つのgetVarcharメソッド(STATIC
メソッドとMEMBER
メソッド)を使用して、データ項目について提供する値リストを名前/値ペアの文字列形式で指定できます。
AnyData
インスタンスを使用すると、任意のデータ項目を書式設定できます。1つ以上のバイナリ型属性を含む属性セットには、AnyData
形式のデータ項目を使用する必要があります。
EVALUATE
演算子の詳細は、第11.3項を参照してください。
関連ビュー: USER_EXPFIL_ATTRIBUTE_SETS
、USER_EXPFIL_ATTRIBUTES
およびUSER_EXPFIL_EXPRESSION_SETS
例
次の問合せでは、getVarchar()
関数により生成されたVARCHAR
形式のデータ項目を使用しています。
SELECT * FROM Consumer WHERE EVALUATE (Consumer.Interest, Car4Sale('Mustang', 2000, 18000, 22000).getVarchar() ) = 1;
この問合せでは、次の構文を使用してデータ項目をAnyData
形式で渡すことができます。
SELECT * FROM Consumer WHERE EVALUATE (Consumer.Interest, AnyData.convertObject ( Car4Sale ('Mustang', 2000, 18000, 22000) )) = 1;
表に大きいデータ項目セットが格納されている場合は、次の構文を使用して、式の格納表をデータ項目の格納表と結合できます。
SELECT i.CarId, c.CId, c.Phone FROM Consumer c, Inventory i WHERE EVALUATE (c.Interest, Car4Sale(i.Model, i.Year, i.Price, i.Mileage).getVarchar()) = 1 ORDER BY i.CarId;
ALTER INDEX REBUILD
文は、式の格納列に作成された式フィルタ索引を再作成します。再作成操作が正常終了するには、USER_INDEXES
ビューで式フィルタ索引のDOMIDX_OPSTATUS
ステータスがVALID
である必要があります。
書式
ALTER INDEX [schema_name.]index_name REBUILD [PARAMETERS ('DEFAULT')]
キーワードとパラメータ
再作成する式フィルタ索引のストアド属性と索引付き属性のリストは、対応する属性セットに関連付けられたデフォルトの索引パラメータから導出されます。
使用上の注意
PARAMETERS
句を指定せずにALTER INDEX...REBUILD
文を発行すると、式フィルタ索引の再作成にはストアド属性と索引付き属性の現行リストが使用されます。また、この文は、依存オブジェクトの欠落が原因でIMPORT
操作中に失敗した索引にも使用できます。
属性セットに関連付けられているデフォルトの索引パラメータは、既存の式フィルタ索引に影響を与えずに変更できます。ALTER INDEX...REBUILD
文にDEFAULT
パラメータを使用すると、これらの索引を再作成して新規のデフォルト・セットを使用できます。デフォルトを使用して索引を再作成すると、式セットに割り当てられていた索引パラメータが消去されます。
式フィルタ索引の索引付き属性に対して定義されていたビットマップ索引は、対応する列に格納されている式が頻繁に(INSERT
、UPDATE
またはDELETE
操作を使用して)変更されると断片化されます。この種の索引を再作成すると、EVALUATE
演算子を使用した問合せのパフォーマンスを改善できます。DBMS_EXPFIL.DEFRAG_INDEX
プロシージャを使用すると、ビットマップ索引をオンラインで再作成できます。
索引の再作成の詳細は、第12.8項を参照してください。
関連ビュー: USER_EXPFIL_INDEXES
およびUSER_EXPFIL_PREDTAB_ATTRIBUTES
例
次の文では、現行のパラメータを使用して索引が再作成されます。
ALTER INDEX InterestIndex REBUILD;
次の文では、対応する属性セットに関連したデフォルトの索引パラメータを使用して索引が再作成されます。
ALTER INDEX InterestIndex REBUILD PARAMETERS('DEFAULT');
ALTER INDEX RENAME TO
文は、式フィルタ索引の名前を変更します。
書式
ALTER INDEX [schema_name.]index_name RENAME TO new_index_name;
キーワードとパラメータ
なし
使用上の注意
なし
例
次の文では、索引名が変更されます。
ALTER INDEX InterestIndex RENAME TO ExprIndex;
CREATE INDEX
文は、列に格納されている式セットに対する式フィルタ索引を作成します。索引付けの対象となる列は(属性セットを割当て済の)式を格納するように構成し、表(式を格納)と同じスキーマに索引を作成する必要があります。
書式
CREATE INDEX [schema_name.]index_name ON [schema_name.].table_name (column_name) INDEXTYPE IS EXFSYS.EXPFILTER [ PARAMETERS (' <parameters_clause> ' ) ...; <parameters_clause>:= [ADD TO DEFAULTS | REPLACE DEFAULTS] [<storeattrs_clause>] [<indexattrs_clause>][<predstorage_clause>] <storeattrs_clause> := STOREATTRS [ ( attr1, attr2, ..., attrx ) | TOP n ] <indexattrs_clause> := INDEXATTRS [ ( attr1, attr2, ..., attry ) | TOP m ] <predstorage_clause> := PREDSTORAGE (<storage_clause>)
キーワードとパラメータ
式フィルタ索引を実装する索引タイプの名前。
このパラメータを指定すると、STOREATTRS
句とINDEXATTRS
句に指定した属性が、対応する属性セットに関連したデフォルトに追加されます。これはデフォルトの動作です。
このパラメータを指定すると、この句の後に指定したストアド属性と索引属性のリストのみを使用して索引が作成されます。この場合、対応する属性セットに関連付けられているデフォルトの索引パラメータは無視されます。
式フィルタ索引のストアド属性をリストします。
式フィルタ索引の索引付き属性をリストします。
このパラメータは、式セットの統計が収集される場合にのみ、STOREATTRS
句とINDEXATTRS
句の両方に使用できます。(GET_EXPRSET_STATSプロシージャの項を参照。)TOP
パラメータに続く数値は、式フィルタ索引用に格納または索引付けされる(最も頻度の高い)属性の数を示します。
述語表のSTORAGE句。<storage_clause>
の定義は、『Oracle Database SQL言語リファレンス』を参照してください。
使用上の注意
式セット(式の格納列)に索引パラメータを直接割り当てると、CREATE INDEX
文のPARAMETERS
句ではSTOREATTRS
句またはINDEXATTRS
句を使用できません。この場合、式フィルタ索引は常に、式セットに関連付けられたパラメータを使用して作成されます。(第18章のINDEX_PARAMETERS
プロシージャとXPINDEX_PARAMETERS
プロシージャに関する各項および第19章のUSER_EXPFIL_INDEX_PARAMSビューに関する項を参照。)
CREATE INDEX
文にPARAMETERS
句を使用せず、式セットに索引パラメータを割り当てなければ、式フィルタ索引には対応する属性セットに関連付けられているデフォルトの索引パラメータが使用されます。デフォルトの索引パラメータ・リストが空の場合、属性セットに定義されたスカラー属性はすべて述語表に格納されて索引付けされます。
式フィルタ索引の場合は、すべての索引付き属性も格納されます。そのため、ストアド属性のリストは、STOREATTRS
句に指定した属性とINDEXATTRS
句に指定した属性から導出されます。REPLACE DEFAULTS
句を指定しなければ、このリストは対応する属性セットに関連付けられているデフォルトの索引パラメータとマージされます。
REPLACE DEFAULTS
句を指定しなければ、式フィルタ索引用の索引付き属性のリストはINDEXATTRS
句および対応する属性セットに関連したデフォルトの索引パラメータから導出されます。このリストが空の場合は、最大10個のストアド属性が選択されて索引付けされます。
ある属性がPARAMETERS
句とデフォルトの索引パラメータにリストされている場合、そのストアド・プロパティと索引付きプロパティはPARAMETERS
句の指定により決定されます。
式セットの述語統計では、CREATE INDEX
文のパラメータでTOP
句を使用可能にする必要があります。(詳細は、「GET_EXPRSET_STATS
プロシージャ」を参照。)STOREATTRS
パラメータにTOP
句を使用する場合は、INDEXATTRS
パラメータ(指定する場合)でもTOP
句を使用する必要があります。また、INDEXATTRS
パラメータのTOP
句には、STOREATTRS
パラメータに指定した値以下の数値を指定する必要があります。TOP
句を使用すると、暗黙的にREPLACE DEFAULTS
が使用されます。つまり、ストアド属性と索引付き属性は、ディクショナリ内で使用可能な述語統計のみに基づいて選択されます。
式フィルタ索引を正常に作成すると、述語表、述語表の1つ以上のビットマップ索引、アクセス関数を含むパッケージが、ベース表と同じスキーマに作成されます。デフォルトでは、述語表とその索引はユーザーのデフォルト表領域に作成されます。PREDSTORAGE
句を使用すると、述語表に使用する代替表領域と他の記憶域パラメータを指定できます。述語表の索引は、常にその表と同じ表領域に作成されます。
式の索引付けの詳細は、第12章を参照してください。
関連ビュー: USER_EXPFIL_INDEXES
、USER_EXPFIL_INDEX_PARAMETERS
、USER_EXPFIL_DEF_INDEX_PARAMS
、USER_EXPFIL_EXPRSET_STATS
およびUSER_EXPFIL_PREDTAB_ATTRIBUTES
例
式セットに索引パラメータを直接割り当てない場合は、次のように、対応する属性セットに指定されているデフォルトの索引パラメータを使用して式フィルタ索引を作成できます。
CREATE INDEX InterestIndex ON Consumer (Interest) INDEXTYPE IS EXFSYS.EXPFILTER;
次の文を使用すると、ストアド属性を1つ追加して索引を作成できます。
CREATE INDEX InterestIndex ON Consumer (Interest) INDEXTYPE IS EXFSYS.EXPFILTER PARAMETERS ('STOREATTRS (CrashTestRating(Model, Year)) PREDSTORAGE (tablespace tbs_1) ');
次の文を使用すると、索引のストアド属性と索引付き属性の完全リストを指定できます。
CREATE INDEX InterestIndex ON Consumer (Interest) INDEXTYPE IS EXFSYS.EXPFILTER PARAMETERS ('REPLACE DEFAULTS STOREATTRS (Model, CrashTestRating(Model, Year)) INDEXATTRS (Model, Year, Price) PREDSTORAGE (tablespace tbs_1) ');
式セットの統計の計算時には、PARAMETERS句でTOP
句を使用できます。これらの統計には、USER_EXPFIL_EXPRSET_STATS
ビューからアクセスできます。
BEGIN DBMS_EXPFIL.GET_EXPRSET_STATS (expr_tab => 'Consumer', expr_col => 'Interest'); END; / CREATE INDEX InterestIndex ON Consumer (Interest) INDEXTYPE IS EXFSYS.EXPFILTER PARAMETERS ('STOREATTRS TOP 4 INDEXATTRS TOP 3');