У меня есть две таблицы: одна хранит сессии пользователя, а другая - данные корзины покупок.sessions
имеет столбец cart_id, который соответствует id
в таблице carts
.Я пытаюсь запустить сборку мусора на моих сеансах на основе базы данных.Сначала я удаляю сеансы с истекшим сроком действия:
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`)
Что тоже медленно.Есть указатели?