マテリアライズド・ビューのチューニング
マテリアライズド・ビューのパフォーマンスを向上させることができます。
結合行の数の制限
パフォーマンスへの影響: 不定
たとえば、ある表の1行を他の表の1行または最大数行にマップする一致条件のみを使用します。
結合列に対する索引の使用
パフォーマンスへの影響: 不定
SELECT
文に指定されているディテール表の列に対して索引を作成します。また、マテリアライズド・ビュー自体に対して索引を作成することも検討します。これによって、マテリアライズド・ビューを継続して更新する場合のパフォーマンスを向上させることができます。
ディテール表でのUPDATE
またはDELETE
処理が列に対する条件に基づくことが多い場合、可能であれば、その列でマテリアライズド・ビューの索引の作成を試行します。
たとえば、cust_order
は、2つの表に基づいた顧客注文のマテリアライズド・ビューです。それらの表は、customer
およびbook_order
です。前者には2つの列(cust_id
およびcust_name
)があり、後者には3つの列(order_id
、book
およびcust_id
)があります。特定の注文を変更するために、条件book_order.order_id=const
を使用してbook_order
表を更新することが多い場合は、cust_order.order_id
の索引を作成します。また、条件book_order.cust_id=const
に基づいて更新することが多い場合は、Cust_order.cust_id
の索引を作成します。
両方の条件を使用して更新することが多く、両方の索引を作成する十分な領域がない場合は、ビューにbook_order.ROWID
を追加し、これに対して索引を作成します。この場合、TimesTenは、ビュー内のすべての行を直接同時に更新するのではなく、ディテール行の更新ごとにビューを更新します。更新する行を検索するスキャンは行スキャンではなく索引スキャンであるため、結合行を生成する必要はありません。
実行計画でViewUniqueMatchScan
が使用されている場合、実行速度が遅くなったり、実行に必要以上の領域が必要になる場合があります。ViewUniqueMatchScan
は、マテリアライズド・ビューの直接更新または直接削除に変換できない更新または処理に使用され、結合行とマテリアライズド・ビュー内の関連行間に一意のマッピングは存在しません。これは、更新または削除される各ディテール表に対して一意キーを選択すると修正できます。
不要な更新の回避
パフォーマンスへの影響: 不定
GROUP BY
列の更新には古い値の削除および新しい値の挿入を実行する必要があるため、結合列の更新は行わないようにしてください。
複数の表を参照する式の更新は行わないようにしてください。この式の中のある値が更新されると、新しい値を取得する別の結合処理がTimesTenによって実行される可能性があるため、ビューを直接更新できなくなる場合があります。
次のいずれかの場合、更新または削除に基づくビュー・メンテナンスにより多くのコストがかかります。
-
ビューを直接更新できない場合。たとえば、ディテール表の
UPDATE
またはDELETE
文に指定されているすべての列がビューで選択されているわけではありません。 -
ビューの行から結合行への1対1マッピングの指示がない場合。
次に例を示します:
Command> CREATE MATERIALIZED VIEW v1 AS SELECT x1 FROM t1, t2 WHERE x1=x2; Command> DELETE FROM t1 WHERE y1=1;
結合行によって1つのビュー行のみが影響を受けるようにするために追加の処理が必要であるため、追加のコストがかかります。
この問題は、x1
がUNIQUE
であるか、またはt1
の一意キーがビューの選択リストに含まれている場合は解決されます。ROWID
は、常に一意キーとして使用できます。
外部結合の内部表への変更の回避
パフォーマンスへの影響: 不定
可能な場合は、内部表でINSERT
処理を実行してから、関連する結合行を外部表に挿入します。同様に、可能な場合は、外部表でDELETE
処理を実行してから、内部表での削除を実行してください。これによって、一致しない行を一致する行に変換したり、その逆の処理を行う必要がなくなります。
ビュー表の列数の制限
パフォーマンスへの影響: 不定
SelectList
に投影される列の数はパフォーマンスに影響する可能性があります。選択リスト内の列の数が増えると、ディテール表に対する処理の準備時間が長くなります。また、ビューのディテール表に対する処理の実行時間も長くなります。必要のない値または式は選択しないでください。
ビューのディテール表に対する処理を準備する際に、オプティマイザは一時索引の使用を検討します。これは、処理およびビューによっては、準備時間を大幅に長くする可能性があります。準備時間が長い場合は、ttOptSetFlag
を使用して、一時範囲索引および一時ハッシュ・スキャンを無効にすることを検討してください。