これはおそらく以前に尋ねられたことがありますが、「IN」のようなキーワードのグーグルはあまりうまく機能しません。
これは私の質問です:
UPDATE tblCustomer SET type = 2
WHERE idcustomer
IN (SELECT fidcustomer1
FROM tblorder
UNION
SELECT fidcustomer2
FROM tblorder
)
内訳:注文テーブルのいずれかの列に表示されるすべての顧客について、すべての顧客のタイプ(intのみ)を2に設定します。
私のテストデータでは、これらのテーブルのいずれにも数百行を超える行は含まれていませんが、クエリは何分間も実行され(UNIONがなくても、大きな違いはないようです)、明らかに内部クエリを再実行します顧客の行ごとに1回。明らかに、それを単一のSELECT DISTINCT(id)に書き直してから、数百の単一行の更新を行い、ODBCアクセスに使用する言語でロジックを実行できますが、これは単なるハックです。
どうすればこれを正しく書き直すことができますか?
補遺:更新したいテーブルには、行ごとに数MBの比較的大きなBYTEAブロブが多数含まれています。これらはストレージ外部または拡張に設定されていますが、それによってシーケンシャルスキャンが遅くなる可能性があるのではないかと思います。これだけでなく、すべての更新には長い時間がかかるようです。