この章では、分散SQL文の最適化方法および分散問合せのパフォーマンスを改善する方法について説明します。
この章には、次の項が含まれます。
Oracle以外のシステムからのデータにアクセスするSQL文を、異機種間の分散SQL文と呼びます。この種のSQL文を最適化するには、Oracleデータベースにのみアクセスする分散SQL文を最適化する場合と同じガイドラインに従います。ただし、通常、Oracleでサポートされている関数と演算子がすべて、Oracle以外のシステムでサポートされるわけではないことを考慮する必要があります。
Oracle Database Gatewayは、Oracleに対して(接続時に)、サポートする関数と演算子を知らせます。Oracle以外のデータ・ソースで関数または演算子がサポートされていない場合は、Oracleがその関数または演算子を実行します。この場合、Oracleはそのデータ・ソースからデータを取得し、関数または演算子をローカルに適用します。これはSQL文の分解方法に影響し、特にOracleが相手データ・ソースと同じコンピュータ上にない場合には、パフォーマンスが低下する場合があります。ただし、バルク・フェッチおよびバルク・ロード機能を使用してパフォーマンスを改善できます。
分散問合せのパフォーマンスを改善するには、次の方法を使用します。
最適なSQL文の選択。
多くの場合、同じ結果が得られるSQL文が複数存在します。すべての表が同じデータベースにある場合、これらのSQL文間のパフォーマンスの違いはほとんどありません。表が異なるデータベースにある場合は、パフォーマンスの違いが大きくなることがあります。また、最適なSQL文はリリースごとに変わる可能性があることに注意してください。
問合せオプティマイザの使用。
問合せオプティマイザはリモート表の索引を使用し、ルールベース・オプティマイザに比べると多数の実行計画を考慮するため、通常はより適切な結果が得られます。問合せオプティマイザを使用すると、通常は分散問合せで妥当なパフォーマンスが得られます。SQL文の変更、ビューの作成または手続き型コードの使用が必要になることはほとんどありません。
ビューの使用。
ビューを使用すると分散問合せのパフォーマンスを改善できる場合があります。次に例を示します。
リモート・データベース上で複数のリモート表を結合する場合
ネットワークを介して異なる表を送信する場合
リモート表からデータをパラレルで取得する場合
手続き型コードを使用する場合。
まれに、PL/SQLプロシージャやプリコンパイラ・プログラムなど、手続き型コードで分散問合せを置き換えるほうが効率的な場合があります。