私は非常に遅い検索クエリです。ビューを書くためのより良いアプローチ
基本的に、これらの3つのテーブルを結合することによって、他の情報とともに各workflow_idの最新ステータスを取得しようとしています。
クエリロジックは、このように書きます:ジョブ実行IDのテーブルバッチステップ実行によって
- グループとmax(step_execution_id)を使用して、最新のステップを取得して、テーブルでステップ実行ID
- グループを使用してすべての列を取得しますjob_instance_idでbatch_job_executionを実行し、最新の実行を取得します。
- インナーは1と2これは私の現在のコードで最新のステップの最新の実行とジョブ実行
- IDマッピングテーブルに参加
に基づいた結合に参加:ここ
SELECT workflow_id,
collabration_key,
TAB3.START_TIME AS WORKFLOWDATE,
batch_step_execution.STEP_NAME AS CURRENT_STEP_NAME ,
batch_step_execution.EXIT_CODE AS CURRENTSTEP ,
batch_step_execution.start_time AS STEPTIME ,
TAB3.EXIT_CODE AS JOB_STATUS
FROM batch_step_execution
INNER JOIN (
SELECT *
FROM rpx_id_mapping
INNER JOIN (
SELECT batch_job_execution.job_execution_id,
batch_job_execution.job_instance_id ,
batch_job_execution.START_TIME ,
batch_job_execution.EXIT_CODE
FROM batch_job_execution
WHERE batch_job_execution.job_execution_id IN (
SELECT MAX(job_execution_id)
FROM batch_job_execution
WHERE job_instance_id IN (
SELECT job_id
FROM rpx_id_mapping
)
GROUP BY job_instance_id
)
) TAB2
ON rpx_id_mapping.job_id = TAB2.job_instance_id
) TAB3
ON batch_step_execution.job_execution_id = TAB3.job_execution_id
WHERE batch_step_execution.step_execution_id = (
SELECT MAX(step_execution_id)
FROM batch_step_execution
WHERE batch_step_execution.job_execution_id = TAB3.job_execution_id
)
) TAB4
ですがテーブル構造。
同じことを達成するためのより良い方法はありますか?ジョブ実行IDのテーブルバッチステップ実行によって
分析クエリを参照してください。同じテーブルに何度もヒットするのを避けたいので、それらをすべて一度結合してから、分析を使用して実際に必要な行を特定します。周囲には多くの例があります。 [ここに昨日からの1つ](http://stackoverflow.com/q/36183914/266304)は、あなたに出発点を与えるかもしれない答えにいくつかのアプローチを持っています。 –
@AlexPoole実際に私たちは常にテーブルのすべてに当たっていますが、唯一のことはヒットごとに必ずしもすべての行を使用しないことです。 – DevG
@AlexPooleあなたは、分析クエリがより良いアプローチになると本当に思いますか?これは決して使ったことはありません。 – DevG