WHERE句を使用して数百の潜在的な文字列を含むNetezzaクエリがあります。私はそれが実行されることに驚いていますが、完了するまでに時間がかかり、時にはエラーが発生します( 'クライアントはトランザクションをロールバックしました')。ここで私のクエリの疑似コードバージョンです。私のクエリでWHERE句の何百もの文字列を含むNetezza SQLクエリの改善
SELECT
TO_CHAR(X.I_TS, 'YYYY-MM-DD') AS DATE,
X.I_SRC_NM AS CHANNEL,
X.I_CD AS CODE,
COUNT(DISTINCT CASE WHEN X.I_FLG = 1 THEN X.UID ELSE NULL) AS WIDGETS
FROM
(SELECT
A.I_TS,
A.I_SRC_NM,
A.I_CD,
B.UID,
B.I_FLG
FROM
SCHEMA.DATABASE.TABLE_A A
LEFT JOIN SCHEMA.DATABASE.TABLE_B B ON A.UID = B.UID
WHERE
A.I_TS BETWEEN '2017-01-01' AND '2017-01-15'
AND B.TAB_CODE IN ('00AV', '00BX', '00C2', '00DJ'...
...
...
...
...
...
...
...)
) X
GROUP BY
X.I_TS,
X.I_SRC_NM,
X.I_CD
;
、私はB.TAB_CODE
約1,200までの値(以上10Kのうち)に結果を制限しています。私は正直なところ、それがすべてで動作して驚いているが、それはほとんどの時間を行います。
これを処理する効率的な方法はありますか?
これは実際には私のクエリよりも時間がかかりました。内部クエリを使用したサンプルクエリでは、私のバージョンは84秒で完了しました。これは298秒でした。理由を完全には理解していませんが、CTASを使用したバージョンで作業しています。 – Lenwood
内部クエリとして 'SELECT tab_code'を使って同じパフォーマンスを得ますか? – Stavr00
これで私はこれを少しでも試しました。内部クエリーもより遅く実行されますが、一度タイムアウトしませんでした。以前はクエリが4回中3回タイムアウトしました。私は、なぜそれがより多くの時間がかかるが、クエリがセッションあたり〜10M行を返していると言うのにSQLに慣れていません。結果を集計するSQLを求めていないので、多分この多くの行を返すのに時間がかかります。 – Lenwood