2
INSERT INTO table3
SELECT
  tbl1.pk_1, tbl1.pk_2, tbl2.pk_3, tbl1.pk4
FROM
  table1 tbl1, table2 tbl2
WHERE
  tbl1.pk_1 = 'root' and
  NOT EXISTS 
    (SELECT 1 FROM table3 tbl3
     WHERE tbl3.pk_1 = tbl1.pk_1 and tbl3.pk_2 = tbl1.pk_2 and tbl3.pk_3 = tbl2.pk_3 and tbl3.pk_4 = tbl1.pk_4) 
;

私のSQL文は次のようになります。table1 と table3 には 1000000 行以上あり、table2 には 100 行あります。この SQL ステートメントは非常に低速です。100秒以上かかります。それを改善する方法はありますか?

4

3 に答える 3

1

この SQL ステートメントのパフォーマンスを改善するのは非常に難しいことがわかりました。MERGE をテストしましたが、200 秒以上かかります。パフォーマンスが向上したとしても、1 秒か 2 秒程度しか改善できないのではないでしょうか。(このような SQL ステートメントは約 20 あります)。そのため、ビジネス ロジックを見直したところ、この SQL ステートメントは不要であることがわかりました。新しいデータを収集するためにより慎重なアルゴリズムが必要なだけです。デカルト積を作成し、この新しいデータを table3 に挿入します。このようにして、この SQL ステートメントを削除することができます。そして、新しいプロセスには数秒しかかかりません! SQL 文を改善するときは、まずこの SQL 文が絶対に必要なものであることを確認してください。

于 2014-03-20T05:23:08.797 に答える