나는 두 가지 테이블을 가지고있다 : 음식과 무언가.mySQL 삭제 쿼리 최적화
- , FOOS는
- MOOS는 외래 키
, FOOS로 foos.id (기록의 수백만) 매우 큰있다 시작일에 색인이 생성됩니다. 무스가 아닙니다 (100k 레코드).
나는 다소 간단한 작업이 필요합니다 : start_date가 < 인 foos에서 레코드를 삭제하고 moos에서 참조하지 마십시오. 나는 너무 특정 문제가 아니라 희망,하지만 난 그냥 (이 영원히 중단) 내가 될 것 "일반적인"방법을 생각했던 시도 동작하지 않습니다 :
이delete foos FROM foos LEFT JOIN moos ON foos.id = moos.foo_id WHERE moos.foo_id is null AND foos.start_date < "2013-05-30";
delete foos FROM foos WHERE start_date < "2013-05-30" AND id NOT IN (select foo_id from moos where foo_id is not null);
내가 추가해야을 :
내가 시작일 < X와 MOOS의 수를 알 수 있도록 항상 X를 선택은
몇 천 MOOS가 foo는 참조 (<> 200/300K 기록) 크지 않다
나는 MySQL의 5.5에 그래서 내가 의해 교체 할 때이 "삭제"하지만 설명 MySQL을 내가 무슨 생각을하고있는 제안 "1 선택"설명 할 수없는 오전는 것 다음 START_DATE 지수
- 처음 사용 올바른 FOOS 을 찾을 수
- 다음
이 작업을 수행 할 수있는 더 나은 방법이 있나요 ... 이 그래서 그런 "긴"거래 안 MOOS보고, 또는 뭔가를 놓친 거지?
감사합니다,
PJ에 대한
moos.foo_id가 null입니까? 왜 null 필드에 합류하는지 –
내가 따라 올지 모르겠다 - 왼쪽 조인이므로 문제가되지 않아야한다. – PJC
start_date에 인덱스가 있습니까? – neutrino