異なるタイプ/ IDのデータに対して存在しない会社と日付の表のデータを選択しようとしています。大きなテーブルで、特定のIDが同じ列に存在しないデータを選択します。クエリを高速化
他の言い方を言えば、company_id, dates_id, daily_val
はwh_calc_id = 344
と同じ場合company_id/dates_id
が存在しない場合はwh_calc_id = 368
となります。
私は緩く、この例を次のようだ:
試み1:
SELECT distinct on (company_id, dates_id) company_id, dates_id, daily_val
FROM daily_data d1
WHERE NOT EXISTS (
SELECT 1
FROM daily_data d2
WHERE d1.company_id = d2.company_id
and d1.dates_id = d2.dates_id
and d1.wh_calc_id = 368
and d2.wh_calc_id = 368
)
and d1.wh_calc_id = 344
問題: Select rows which are not present in other table
これらはそれで私の2回の試行されている それは超遅いです:27分
試行2:[削除]
すべての1(巨人)テーブル: のcompany_id int型(インデックス付け)、 dates_id int型(インデックス付け)、 wh_calc_id int型(インデックス付け)、 daily_val数値
私はスピードを助けるインデックスを追加する開いています物事は上がっていますが、どのような指標ですか?
Postgresの10
PS - 私は、彼らが完了する前に、両方のクエリを殺すために持っていたので、彼らが正しく書かれている場合、私は本当に知りません。うまくいけば私の記述が助けてくれるだろ
私はこれは、左のように参加します:SELECT distinct(company_id、dates_id)company_id、dates_id、daily_val FROM daily_data d1 LEFT JOIN daily_data d2 ON d1.company_id = d2.company_idとd1.dates_id = d2.dates_idとd1.wh_calc_id = 368およびd2.wh_calc_id = 368 d1.wh_calc_id = 344およびd2.company_idはNULLです。使用する列に索引を作成します。表daily_data(company_id、dates_id、wh_calc_id)に索引を作成します。 –