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을 덧붙여 오작동을 방지하는 것이 좋다.
읽어주셔서 감사합니다. 여러분께 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.