2016-10-21 7 views
0

パッケージ内にリモートDBリンクを使用するカーソルがあります。 パッケージのパフォーマンスを最適化したい。 そこで、カーソルを最適化することから始めました。どのように複雑な分散クエリを最適化するには?

私は分析するためにいくつかの情報を与えるでしょう、

  • クエリのみリモートDBへのリンクにはローカルのテーブルはありません。
  • カーソルクエリは6つのリモートDBリンクを使用し、それらに結合操作 を実行します。
  • すべてのDBリンクが同じDBを指していますが、異なるテーブルを指しています。
  • SELECTは、任意の集計操作を持っていないと、わずか数の列のNVL 機能は
  • 約90列は、クエリの構造は、それはありません

    SELECT (SOME 90 COLUMNS) 
    FROM [email protected]_one m1, 
         [email protected]_one m2, 
         [email protected]_one pa, 
         [email protected]_one pb, 
         [email protected]_one pc, 
         [email protected]_one xa, 
        (SELECT 
         geo.country, 
         geo.state 
        FROM [email protected]_one geo) geo WHERE (m1.master_key = m2.master_key) AND 
        (pc.weather_key = m2.cloud_key) AND 
    (m1.order_type_id = pa.weather_key) AND 
    (pa.weather_key = pb.weather_key) AND 
    (m2.food_store_key = xa.food_store_key) AND 
    ((nvl(m2.shop_key ,121)) = xa.store_key) AND 
    (geo.country (+) = m1.country) AND 
    (xa.food_type NOT IN ('COLD')) AND 
    (m2.food_type_code NOT IN ('WINTER') 
        OR m2.price_per_portion !=0) AND 
    ((m1.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m1.last_purchase_date <= TRUNC(SYSDATE)) 
    Or (m2.last_purchase_date >= TRUNC(SYSDATE-10) - 1/48 And m2.last_purchase_date <= TRUNC(SYSDATE))); 
    

    ある

を選択されています実際のクエリが構造は似ています。

+0

remouteデータベース上で実行しようとする場合、クエリを投稿してください! –

+3

なぜ4つのデータベースリンクがすべて同じデータベースに接続されているのでしょうか? 1つのデータベースリンクを使用してそれぞれ参照される4つのリモートオブジェクトがあることを意味しますか?あなたはリモートシステムに触れることができますか?それを処理する前にローカルシステムにデータを複製するという希望はありますか? –

+0

@JustinCave申し訳ありません。間違いがありました.6人すべてが同じデータベースに接続しています。今質問を編集します。 –

答えて

1

まず、あなたの質問のボトルネックを見つけようとします。 のみ リモートテーブルからクエリを実行すると、あなたがヒント/ * + DRIVING_SITE(...)*/https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements006.htm#BABEGIJCとOracleを使用することに問題は

+0

ヒントの使用は良いですが、すべてのテーブルはリモートDBリンクからのものです。 –

+0

だから、私は 'DRIVING SITE'についてあなたがそれを使うならば、オラクルがリモートデータベース上でクエリを実行(ジョイン、ソートなど)しようとし、あなただけの結果に戻ることを言います。一般的には高速ですし、リモートデータベースからデータを取得し、現在のサイトでクエリを実行してください –

+0

大丈夫です。/* + DRIVING_SITE(m1、m2、pa、pb、pc、xa)*/ のようなヒントを与えることができますか? –

関連する問題