mysql 대량 데이터 삭제

772 단어
mysql 대량 데이터 삭제
표(syslogs)가 1000만 개의 기록을 가지고 있다고 가정하면 업무가 멈추지 않는 상황에서 statusid=1의 모든 기록을 삭제해야 한다. 600만 개의 기록이 많지 않다. DELETE FROM syslogs WHERE statusid=1을 직접 실행하면 삭제 실패를 발견할 수 있다. 왜냐하면 lock wait timeout exceed의 오류이기 때문이다.
이 문장에 관련된 기록 수가 너무 많기 때문에 우리는 LIMIT 파라미터를 통해 대량으로 삭제한다. 예를 들어 10000개마다 한 번씩 삭제하면 우리는 이용할 수 있다.
MySQL과 같은 문장으로 완성:

 DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;

그리고 여러 번 실행하면 이 기록들을 성공적으로 삭제할 수 있다.
참고:
대량 삭제를 실행할 때 limit을 사용해야 합니다.limit을 사용하지 않으면 대량의 데이터를 삭제하면 자물쇠가 사라질 수 있기 때문이다.
만약 delete의where 문장이 인덱스에 없다면, 먼저 메인 키를 찾은 다음, 메인 키에 따라 데이터베이스를 삭제할 수 있습니다.
평소 업데이트와 delete를 할 때도 limit 1을 덧붙여 오작동을 방지하는 것이 좋다.
읽어주셔서 감사합니다. 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기