Estoy de acuerdo con Ben Lessani que se debe utilizar el core/iterator
modelo de recursos para cargar grandes colecciones de una fila a la vez , si es posible .
Sin embargo, hay limitaciones. Como se explica en " addAttributeToSelect no funciona con core / resource_iterator? ", No funciona bien con los modelos EAV si necesita incluir valores de las tablas de valores de atributos.
Y el ejemplo vinculado de StackOverflow en realidad no es tan bueno porque repite la misma consulta con diferentes LIMIT
expresiones. Para consultas complejas, esto podría ser un problema de rendimiento, pero aún más importante, obtendrá duplicados si se agregan nuevas filas en el medio.
Una mejor manera de manejar colecciones en trozos es cargar primero todos los identificadores, luego usar estos identificadores como filtro para la recopilación paginada real.
Ejemplo simple para productos:
$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());