2011-09-01 4 views
1

mysql에서 큰 조인을 수행 한 다음 결과 데이터를 처리하고 다른 테이블에 쓰려고합니다. 지금은 디폴트 mysql_store_result를 사용하고 있지만, 쿼리 실행 후 $ sth-> execute()를 실행하는 데는 약 20 분이 걸린다. mysql_use_result로 전환하고 싶다. 왜냐하면 한 번에 한 행에서만 동작하기 때문이다.Perl DBD :: mysql 'mysql_use_result'다른 테이블에 삽입하는 동안 사용할 수 있습니까?

그러나, 문서의이 부분은 날 귀찮게 :

이 속성은 mysql_store_result가보다는 mysql_use_result를 사용하여 드라이버를 강제로. 전자는 더 빠르고 더 적은 메모리를 소비하지만 다른 프로세스를 차단하는 경향이 있습니다. 이것이 바로 mysql_store_result가 기본값입니다.

나는 한 번에 한 행씩 작동 한 다음 결과를 배열에 저장하고 있습니다. 500 개 항목마다 별도의 테이블에 INSERT를 수행합니다. mysql_use_result 루프 내에서 이렇게해도 괜찮은가요? INSERT를위한 새로운 DB 핸들러를 정의한다면 어떻게해야할까요?

답변

1

삽입을 수행하려면 별도의 DB 연결을 사용해야합니다.

그러나 인용 한주의 사항은 특정 클라이언트뿐 아니라 서버에서 물건을 차단하는 것에 관한 것입니다.

클라이언트 측에서 각 행에 대해 처리를 많이하고 있다면 당신이 mysql_use_result()를 사용해서는 안, 또는 출력이 화면에 전송되는 경우 :

mysql documentation 조금 명확 사용자는^S (스크롤 중지)를 입력 할 수 있습니다. 이렇게하면 서버가 묶여서 다른 스레드가 데이터를 가져 오는 테이블을 업데이트하지 못하게됩니다.

는 (그게 과장, 그리고 MySQL은 장난감 SQL 구현 훨씬 더 때 다시 기록되었을 수 있습니다 생각합니다.)

+0

마지막 줄 그냥 날 더욱 궁금합니다. 내가 읽고있는 테이블에 쓰지 않고있다. –

+0

당신은 아니지만 누구입니까? 어쨌든 mysql 페이지에는 다른 것들을하기 위해 별도의 연결이 필요하다는 것이 분명해진다. – ysth

+0

나는 그냥 가서 시도해 보겠다. 나는 당신을 대답으로 표시 할 것입니다. –

관련 문제