プロが教える店舗&オフィスのセキュリティ対策術

INSERT INTO SELECT文で挿入先テーブルに存在しないレコードのみ検索することはできますか。
IGNOREを使えば、挿入先テーブルに存在するレコードは無視されるのでエラーは回避できるのですが、IGNOREに頼らずに、挿入先テーブルにすでに存在するレコードは検索しないようにSELECT文を書けば、数件の検索で済むため圧倒的に高速化できると思うのです。

挿入先テーブルは、主キー1、主キー2、主キー3、主キー4、値1の5カラムで構成されています。

主キー1 NOT IN(SELECT 主キー1 FROM table)
OR 主キー2 NOT IN(SELECT 主キー2 FROM table)
OR 主キー3 NOT IN(SELECT 主キー3 FROM table)
OR 主キー4 NOT IN(SELECT 主キー4 FROM table)
感覚的な話で恐縮ですが、やりたい事はこんな感じで、これだと多分うまくいきません。

DBはmysql-5.1.39-4.fc12.i686です。

A 回答 (1件)

> 数件の検索で済むため圧倒的に高速化できる



その分のオーバーヘッドを考えればignoreの方が圧倒的に有利だと思います
    • good
    • 0
この回答へのお礼

代替案が浮かばないため、今はIGNOREで運用しています。
今のところINSERT処理は数分で終了するので、このぐらいなら離席しないで待っていられるのですが、今後件数がどんどん増えていくと、しんどいので何か代替案がないかと考えています。
おっしゃる通り、検索条件が複雑なためかなりのオーバーヘッドがかかると思いますが、もしうまいSELECT文を考えていただけたら、実際に流して処理時間を計測してみたいのです。

お礼日時:2020/05/20 15:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!