我想刪除不在活動中的人或照片或電子郵件訂閱者。也許他們是,但他們被標記的唯一照片被刪除,或者他們所在的事件從數據庫中清除。Mysql刪除ID在多個表中不存在 - 最佳實踐?
兩個顯而易見的選擇:
1)
DELETE FROM people
WHERE personPK NOT IN (
SELECT personFK FROM attendees
UNION
SELECT personFK FROM photo_tags
UNION
SELECT personFK FROM email_subscriptions
)
2)
DELETE people FROM people
LEFT JOIN attendees A on A.personFK = personPK
LEFT JOIN photo_tags P on P.personFK = personPK
LEFT JOIN email_subscriptions E on E.personFK = personPK
WHERE attendeePK IS NULL
AND photoTagPK IS NULL
AND emailSubPK IS NULL
兩個一& P每人約一百萬行,和E幾千元。
第一個選項工作正常,需要10秒左右。
第二個選項超時。
有沒有更聰明,更好,更快的第三選擇?
這可能是一個愚蠢的問題,但如果第一個選項有效,你可以使用它嗎?它不夠快嗎?如果是這樣,你在尋找什麼速度? – raphael75
你確定要這樣做嗎?如果刪除發生但如果你想重新掛一張新照片怎麼辦? – Drew
我確定德魯。這是一個半虛構的例子,但我的用例是堅實的。 – Codemonkey