두 개의 테이블이 있는데, 하나는 사용자 세션을 저장하고 다른 하나는 장바구니 데이터를 저장합니다. sessions
에는 테이블의 해당 id
과 일치하는 cart_id 열이 있습니다. 내 데이터베이스 기반 세션에서 가비지 수집을 실행하려고합니다. 그 cart_id이 하나와 일치하는 세션이 없습니다,슬로우 가비지 수집 쿼리
DELETE FROM sessions WHERE expires < NOW();
그리고, 지금 즉, 고아 카트를 삭제 : 우선 내가 만료 세션을 삭제합니다.
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
조인을 위해 (정기적으로) 사용하는 열에 인덱스가 꼭 필요합니다. –