2011-04-25 7 views
0

많은 쿼리를 배치 쿼리로 다시 작성했습니다. 이제 더 이상 DB 호출이 foreach 루프 안에 없습니다!느린 배치를 최적화하는 방법 MySQL에서 INSERT IGNORE

이러한 새로운 일괄 처리 쿼리 중 하나가 피벗 테이블에 무시됩니다. 매번 1-4 초가 걸립니다. 상당히 크고 (호출 당 100 행) 테이블의 행 수가 2 백만을 초과합니다.

내 프로그램의 현재 병목 현상입니다. 나는 테이블을 잠그는 것과 같은 것을 고려해야 하는가? (결코 전에 해본 적이 없지만, 나는 그것이 위험하다고 들었다.) 또는 내가 먼저 살펴 봐야 할 다른 옵션이 있는가?

피벗 테이블이므로 업데이트 할 두 행으로 구성된 고유 키가 있습니다.

답변

0

색인을 사용하고 있습니까? 올바른 열을 인덱싱하면 대단히 속도가 빨라집니다. 많은 업데이트 및 삽입 작업을 수행하는 경우 색인을 다시 생성하는 데 시간이 걸리기 때문에 완료 될 때까지 색인을 비활성화하는 것이 좋습니다. 나는 테이블을 잠그는 것이 어떻게 도움이 될지 이해하지 못합니다. 다른 사용자 또는 응용 프로그램이이 테이블을 사용자에게 보냅니 까? 그게 잠금이 속도를 높이는 주요 이유가 될 것입니다.

+0

잘 호출은 multi_curl 콜백 함수의 일부이므로 한 인스턴스가 다른 인스턴스가 테이블에 쓰는 동시에 테이블에서 읽으려고 시도 할 수도 있습니다. 테이블 잠금, 인덱스 삭제, 삽입, 인덱스 추가, 테이블 잠금 해제와 같은 것을 생각하고있었습니다. 그러나, 당신이 말한대로, 색인 생성에는 시간이 걸립니다. – jisaacstone

관련 문제