집 >데이터 베이스 >MySQL 튜토리얼 >최대 절전 모드를 사용하여 메모리 부족 없이 9천만 개의 레코드를 효율적으로 처리하려면 어떻게 해야 합니까?
Hibernate의 ScrollableResults 인터페이스는 전체 결과 세트를 메모리에 로드하지 않고 쿼리 결과를 반복하는 수단을 제공합니다. 그러나 이 질문이 강조하는 것처럼 MySQL Connector/J 드라이버를 사용하는 경우 많은 수의 레코드가 있는 ScrollableResults를 사용하면 메모리 문제가 발생할 수 있습니다.
이러한 경우 유일한 실용적인 옵션은 결과를 반복하는 것입니다. setFirstResult 및 setMaxResults 메소드를 사용하여 일괄 처리합니다. 이 접근 방식은 특히 큰 오프셋을 처리할 때 비효율적으로 보일 수 있지만 메모리 문제를 방지하는 가장 안정적인 방법입니다.
이상적으로는 세션 수준 캐싱 또는 더티 추적 문제를 방지하기 위해 상태 비저장 세션을 사용해야 합니다. .
또 다른 잠재적 최적화는 id 필드를 인덱스의 마지막 열로 사용하고 이전 배치의 가장 높은 ID를 다음과 같이 사용하여 한 번에 레코드 배치를 검색하도록 쿼리를 수정하는 것입니다. 출발점. 쿼리의 other_condition이 동일 조건을 사용하는 경우 성능이 향상될 수 있습니다.
쿼리를 다음과 같이 수정하면
select * from person where id > <max_id_of_last_batch> and <other_conditions> order by id asc limit <batch_size>
큰 오프셋 로드로 인한 성능 저하를 방지하고 더 많은 성능을 얻을 수 있습니다. 효율적인 반복 프로세스.
위 내용은 최대 절전 모드를 사용하여 메모리 부족 없이 9천만 개의 레코드를 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!