2013-06-13 6 views
0

MyISAM 스토리지 엔진을 사용하는 MySQL 데이터베이스로 작업하고 있습니다. 다중 테이블 삭제 구문을 사용합니다. 지금까지 한 번에 여러 자식 테이블에서 삭제해야 할 때만 사용했습니다. 하지만 하나의 쿼리에서 여러 자식 테이블 부모 테이블을 삭제하는 데 사용하는 것이 좋습니다.여러 테이블 DELETE 문이 좋지 않습니까? 왜?

최근에 저는 여러 테이블에서 한 번에 삭제하는 것이 좋지 않다고 말하는 SO 및 다른 포럼에 대한 몇 가지 게시물을 보았습니다. 그러나 포스터 중 어느 것도 을 설명하지 않은 이유는 무엇입니까 추천하지 않습니다.

테이블이 처리되는 순서를 제어 할 수 없으므로 외래 키 제약 조건이있는 InnoDB 테이블과 관련된 다중 테이블 삭제 문제가있을 수 있음을 이해합니다. 필자의 경우에는 문제가되지 않습니다.

여러 테이블 삭제가 모든 테이블에서 삭제되거나 삭제되지 않는다고 생각했습니다. 그러나 그것이 사실인지 아닌지에 대한 정보를 찾을 수는 없습니다. 부분적으로 성공할 수 있으면 데이터가 손상됩니다.

여러 개의 MyISAM 테이블을 동시에 삭제하는 것은 좋지 않은가요? 항상 나쁜 생각입니까 아니면 부모/자녀 관계가있을 때만입니까? 이유를 설명하십시오.

기록을 위해 현재이 프로젝트에서는 InnoDB 로의 변경이 옵션이 아닙니다.

+0

테이블 자체를 삭제 또는 삭제했거나이 테이블 (부모 및 자식)의 레코드를 참조 했습니까? – Edper

+0

나는 테이블에 기록을 언급하고 있었다. – toxalot

답변

1

내가 볼 수있는 한 가지 가능한 문제점은 관련 하위 레코드 (예 : 서버 고장, 전원 중단 등)에 결함이 있고 (상위 테이블에서) 상위 레코드를 이미 삭제 한 경우, 관련된 자식 레코드/테이블이 더 이상 어머니 레코드/테이블과 관련 될 수 없음을 의미하는 orphan record(s)이 있습니다. 부모 테이블/레코드 앞에 하위 테이블/레코드를 먼저 삭제하면이 문제가 해결 될 수 있습니다.

MyISAM은 테이블 수준 잠금을 사용하기 때문에 또 다른 하나는 performance issue입니다. 따라서 여러 레코드 (여러 테이블에서)를 삭제하면 몇 가지 원본에서 삭제하는 것보다 액세스 시간 성능이 저하 될 가능성이 커집니다.

관련 문제