次のうちどれがより効率的か教えてください。数千万行を処理する必要があり、パフォーマンスが重要です。
2 番目の例table0
は一時テーブルで、最初の例の table0 よりもはるかに高速に作成できます。(なぜですか?) 最初の例で一時テーブルを使用できませんでした。これは、テーブルが作成される前に変数行を宣言できなかったためです。(table0
元のテーブルのすべての個別の行を保持します。これは、以下のコードには示されていません。)
blah2
2 番目の例では、 、blah3
、blah4
およびblah5
of のハッシュ インデックスを作成することをお勧めしますがtable1
、テーブルへの書き込みに時間がかかります。
FOR row IN SELECT * FROM table0
LOOP
IF NOT EXISTS (SELECT 1 FROM table1
WHERE blah2 = row.blah2 AND blah3 = row.blah3
AND blah4 = row.blah4 AND blah5 = row.blah5) THEN
INSERT INTO table2
(blah0, blah1, blah2, blah3, blah4, blah5)
VALUES (row.blah0, row.blah1, row.blah2, row.blah3, row.blah4, row.blah5);
END IF;
END LOOP;
INSERT INTO table2
(blah0, blah1, blah2, blah3, blah4, blah5)
SELECT blah0, blah1, blah2, blah3, blah4, blah5 FROM table0
WHERE NOT EXISTS
(SELECT 1 FROM table1
WHERE table1.blah2 = table0.blah2
AND table1.blah3 = table0.blah3
AND table1.blah4 = table0.blah4
AND talbe1.blah5 = table0.blah5);