2012-01-26 3 views
1
배치가 JDBC를 사용하여 DB를 MySQL의에서 삭제해야 할 더

어떤 방식.MySQL의 성능

나는 기본 키의 목록을 가지고있다. 삭제해야합니다.

  1. 사용 일괄 업데이트 API를 제공했다.
  2. 절은 절에서 갖는 위치를 가진 삭제합니다. 이 데이터 전송을 줄이기로
+1

정직하게 알지 못한다. 나는 실제로 이것을 알고있는 압도적 인 다수가 아니라고 생각한다. 그러나 이것은 테스트하기가 매우 쉽기 때문에, 당신이 그것에 도달하면 우리에게 말할 수 있습니다. –

답변

0

이 사용은 WHERE에 절은, 빠릅니다. 쿼리가 너무 긴 경우 때문에, 트레이드 오프가, MySQL은 그것을을 구문 분석 시간이 걸립니다. 삭제할 레코드가 너무 많으면 10K 길이의 쿼리로 분할하는 것이 좋습니다. 당신이 삭제 너무 많은 레코드가있을 때

또 다른 해결책은, 그리고 당신이 다른 쿼리를 얻을, 당신은 예를 들어, 직접 사용할 수 있습니다

DELETE FROM table1 WHERE id IN (SELECT id FROM table2 WHERE status = 1) 
0

을 나는 비슷한 문제가와로 결정했다 준비된 명령문과 JDBC 드라이버를 사용하여 두 가지 접근법을 벤치 마크하십시오. 내 응용 프로그램에는 3 개의 테이블이 있습니다. 각 테이블에서 삭제해야하는 키 목록을 검색하는 쿼리가 있습니다.이 키는 세 테이블 모두에서 인덱싱되고 그 중 하나의 기본 키는 인덱싱됩니다.

먼저 I 시도 :

SELECT id FROM table1 WHERE delete_condition 

for each delete_id 
    DELETE FROM table1 WHERE table1.id = delete_id 
    DELETE FROM table2 WHERE table2.id = delete_id 
    DELETE FROM table3 WHERE table3.id = delete_id 
loop 

으로 I이 초당 74 행의 삭제 레이트를 제공 알았다.

두 번째 방법 : 초당 43,026 행의 삭제 속도를 제공

DELETE FROM table2 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition) 
DELETE FROM table3 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition) 
DELETE FROM table1 WHERE table1.id IN (SELECT id FROM table1 WHERE delete_condition) 

. 내가 MySQL의 후드에서 무슨 일이 일어나고 있는지 모르겠지만, 지금부터 DELETE FROM 테이블 WHERE id IN() 접근법을 사용할 것이다.