2017-09-11 10 views
0

私はPostgreSQL上にいくつかの非常に大きなテーブル(イベントとイベントの測定値付き)を持つデータベースを持っています。測定の日付範囲と1つのイベントタイプについては、Invantive SQLを使用して平均期間を計算したいと考えています。ゆっくりとグループ化する関数を調整するInventive SQL

イベント(約5 GB、簡体字):

  • ID
  • TYPE_CODE

event_measurements、約50ギガバイト:

  • のevent_id
  • を開始
  • は私が

    select avg(ended - started) 
    from events 
        join event_measurements on events.id = event_measurements.event_id 
    where events.type_code = '...' 
    

    のようなクエリを実行すると、それは内部メモリのGB単位を消費する時間走る

を終えました。

外部キーインデックスを含め、必要なインデックスがすべて整っています。

セッションI/Oから、Invantive SQLは最初に詳細をダウンロードし、クライアントでグループ化を実行することがわかりました。これは小規模では問題ありませんが、この場合、このようなクエリでは5分のようなネイティブパフォーマンスが必要です。

周囲のクエリにはInvantive SQLが必要です。したがって、データベース上の「Force native SQL」スイッチはオプションではありません。

「ネイティブSQLを強制する」に切り替えることなく、このクエリのパフォーマンスを向上させる方法を教えてください。

+0

http://wiki.postgresql.org/wiki/SlowQueryQuestions –

+1

Postgresでビューを作成し、ビューから結果にアクセスします。 –

答えて

0

@GordonLinoffにより示唆されるようにビューを作成するだけで、あなたも使用することができます。

  • local log onをInvantive SQLを回避するために、個々のステートメント、および
  • insert into nativeplatformrequests(payload_text) values ('select avg...')との間の接続を切り替えます。 OracleではEXECUTE IMMEDIATEのようです。
関連する問題