2017-03-07 9 views
0

クエリの中でgroupを使用していくつかの列の合計を取得すると、時間がかかりすぎます。Group byは、OracleのSQL Queryで非常に時間がかかります

例: -

SELECT 
    A.ID PROJECT_ID, 
    REGION.LEVEL2_NAME REGION, 
    A.LOCATION LOCATION, 
    A.DEPT DEPT, 
    REPLACE(A.ROLE_NAME, ',', '') ROLE_NAME, 
    A.MONTH_START, 
    TO_CHAR(A.MONTH_START,'MON YYYY') MONTH_LABEL, 
    Sum(A.value1),Sum(A.value2) 
FROM 
(/here is my Select Query which gives flat data with some 2 UNION Queries/)A 
INNER JOIN table REGION ON A.column1= REGION.column1 
GROUP BY 
    A.ID, 
    A.ROLE_NAME, 
    A.LOCATION, 
    A.DEPT, 
    A.UNIT_OF_MEASURE, 
    REGION.LEVEL2_NAME, 
    A.MONTH_START 

してくださいアドバイス。

+0

サブクエリはいくつの行を取得しますか? – JohnHC

+0

こんにちはJohn、カウントは少し巨大です(つまり、4000万) – user2131546

+0

ランタイム統計情報を含む実行計画を生成できますか?あなたはこれを行うことができます。セッションを変更するtimed_statistics = all; <あなたのクエリを実行する>。テーブルから選択*(dbms_xplan.display_cursor(null、null、 'ALLSTATS LAST')); – BobC

答えて

0

「グループを追加したとき、それは長い時間がかかり始めた」とはどういう意味ですか?コメントに追加情報があれば、私はそれには長い時間がかかると予想します。グループを追加する前に、クエリーを実行したときにかなり早く戻ってきたクエリを実行していて、クライアントツールに応じてローのサブセット(200〜500)をフェッチしていました。グループを追加すると、データベースはクエリのすべての行を読み込む必要があります。これは、単一の行が返される前にすべての行を集計する必要があるためです。 4000万行では、これには時間がかかることがあります。

新しい投稿があります。しかし、質問に対する私のコメントは、パフォーマンスのヘルプを探しているときに追加情報を提供する必要があるということです。完全なクエリが役立ちます。あなたはクエリの大部分を省いています。データモデル、サンプルデータ、および関連するテーブル上の追加データボリューム。情報を保護するために必要に応じてスクラブしてください。

+0

私はあなたの説明に同意します - 私はただ質問を投稿しています。パフォーマンスを向上させるために書くことができる他の方法があればアドバイスをお願いします。 – user2131546

+0

私の答え/コメントを参照してください。あなたは私にあなたを助けるための十分な情報を私に提供していません。また、これがどれくらい早く復帰するべきかについてのさらなる洞察も提供していません。私が言ったように、あなたの選択は、最初の行セットをすばやく返していますが、行セット全体をすばやく返すため、選択が高速になるため、実際よりも速く表示されます。しかし、グループを/集計で追加すると、今は全体を待っています。 – unleashed

+0

ここに質問全体を投稿することができません。 – user2131546

関連する問題