まあ、SELECT
クエリは何も削除しないので、その理由は間違っています。
DELETE c FROM child AS c
LEFT OUTER JOIN parent AS w1 ON c.child_id = w1.a_child_id
LEFT OUTER JOIN parent AS w2 ON c.child_id = w2.b_child_id
WHERE w1.a_child_id IS NULL AND w2.b_child_id IS NULL;
それは二回、親テーブルに参加する奇妙に見えるかもしれませんが、それはおそらく、インデックスよりよい(あなたがa_child_idとb_child_idにインデックスを持っていると仮定)を利用します:
私はこれを試してみました。
EXPLAINを使用して最適化計画を確認する必要があります。 SELECTを削除し、最適化計画を取得変換:それは、「インデックスを使用して」言うとき
mysql> explain select c.child_id from child c
left outer join parent w1 on c.child_id = w1.a_child_id
left outer join parent w2 on c.child_id = w2.b_child_id
where w1.a_child_id is null and w2.b_child_id is null\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: c
type: index
possible_keys: NULL
key: PRIMARY
key_len: 8
ref: NULL
rows: 5
Extra: Using index
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: w1
type: ref
possible_keys: ac
key: ac
key_len: 9
ref: test.c.child_id
rows: 1
Extra: Using where; Using index
*************************** 3. row ***************************
id: 1
select_type: SIMPLE
table: w2
type: ref
possible_keys: bc
key: bc
key_len: 9
ref: test.c.child_id
rows: 1
Extra: Using where; Using index
それがテーブルを読み取るために必要とせず、のみインデックスを使用して、テーブルへのアクセスを解決することができますことを意味し行。
私は、あなたの説明からあなたのテーブル構造を推測する上記のMySQL 5.5.12をテストしました。私はa_child_idとb_child_idのそれぞれに1列のインデックスを作成しました。
私はテーブルの子に定義されているa_child_idまたはb_child_idを持っていません。それらはテーブルの親と参照の子で定義されています。 – user157195