Concordo com Ben Lessani que você deve usar o core/iterator
modelo de recursos para carregar grandes coleções uma linha por vez, se possível .
No entanto, existem limitações. Conforme explicado em " addAttributeToSelect não está funcionando com core / resource_iterator? ", Ele não funciona bem com modelos EAV se você precisar incluir valores das tabelas de valores de atributos.
E o exemplo vinculado do StackOverflow na verdade não é tão bom porque repete a mesma consulta com LIMIT
expressões diferentes . Para consultas complexas, isso pode ser um problema de desempenho, mas ainda mais importante, você receberá duplicatas se novas linhas forem adicionadas.
Uma maneira melhor de lidar com coleções em blocos é primeiro carregar todos os IDs e depois usá-los como um filtro para a coleção paginada real.
Exemplo simples para produtos:
$ids = Mage::getModel('catalog/product')
->getCollection()
->getAllIds();
$page = 1;
do {
$collection = Mage::getModel('catalog/product')
->getCollection()
->addIdFilter($ids)
->setPageSize(100)
->setCurPage($page);
$results = $collection->load();
// do stuff ......
$page++;
} while ($results->count());