我有兩個表,一個存儲用戶會話,另一個存儲購物車數據。 sessions
有一個cart_id列,該列與carts
表中的相應id
匹配。我正試圖在基於數據庫的會話上運行垃圾回收。首先,我刪除過期會話:Sloooow垃圾收集查詢
DELETE FROM sessions WHERE expires < NOW();
然後,我刪除了現在孤立的,換句話說車,沒有會話,其cart_id匹配這一個。
DELETE `carts`
FROM `carts`
LEFT OUTER JOIN `sessions`
ON `carts`.`id` = `sessions`.`cart_id`
WHERE `sessions`.`cart_id` IS NULL
這最後一個查詢真的很慢,就像超過60秒種慢。
我已經試過這一個,而不是:
DELETE `cart`
FROM `cart`
WHERE `cart`.`id` NOT IN (SELECT `cart_id` FROM `sessions`)
這也是緩慢的。任何指針?
你對'sessions.cart_id'的指數? –
我沒有索引。這可能是我的問題,呃? *吝嗇退縮閱讀索引手冊* – Rob
你肯定需要索引列(你經常)用於連接。 –