2011-09-16 1 views
2

The Application (TM)에 새로운 추가 배치를 계획 할 때 궁금한 질문이 제기되었습니다 (회사 전체의 거물처럼). 호출 된 각 행에 대해 결과 집합이 필요하면 CURSOR를 반복하고 프로 시저를 호출하거나 PHP에서 집합을 가져 오는 프로 시저를 작성하여 MySQL에서 모든 작업을보다 효율적으로 수행 할 수 있습니다. 그것을 "수동으로"합니까? 이 절차는 짧은 기간 동안 몇 번만 실행됩니다 (각 통화마다 ~ 1 초, 절차 당 약 2 ~ 3 건, 하루에 몇 번).PHP 루프를 통한 커서 사용

내가 묻는 이유는 누군가가 CURSORS가 MySQL과 PHP간에 데이터를 여러 번 보내는 오버 헤드보다 효율적이지 않은 경험이 있는지 궁금해하기 때문입니다. 다른 문제는 핵심 테이블 중 하나를 사용하므로 히트를 최소화하고 싶습니다.

+0

이 절차는 mysql 저장 프로 시저입니까? – TJHeuvel

+0

네, 지금까지는 저장 프로 시저이고 평균 예상 런타임은 약 1 초입니다. – Naltharial

답변

1

PHP 반복기 인터페이스 (http://php.net/manual/en/class.iterator.php)를 구현하는 스텁 클래스를 만들 수 있습니다. Iteretor 인터페이스로 구현 한 클래스를 인스턴스화하면 연결을 유지하고 커서의 위치를 ​​추적 할 수 있습니다. 이 객체의 새 인스턴스를 만들 때 초기 쿼리를 실행하고 initail 커서를 가져올 수 있습니다. 그런 다음 객체에 foreach를 사용하면 객체를 호출하여 next() 메서드의 사용자 정의 구현을 호출합니다.이 메서드는 CURSOR를 앞쪽으로 이동하고 루프에 필요한 현재 값을 반환합니다.

+0

정확히 찾고있는 성능 대답은 아니지만 귀하의 대답이 내 문제에 대한 새로운 의견을 제공 했으므로 고맙습니다. – Naltharial