ผมเห็นด้วยกับเบน Lessaniว่าคุณควรจะใช้core/iterator
รูปแบบการใช้ทรัพยากรในการโหลดคอลเลกชันขนาดใหญ่หนึ่งแถวในเวลาถ้าเป็นไปได้
อย่างไรก็ตามมีข้อ จำกัด ดังที่อธิบายไว้ใน " addAttributeToSelect ไม่ทำงานกับ core / resource_iterator? " มันใช้งานไม่ได้กับรุ่น EAV หากคุณต้องการรวมค่าจากตารางค่าแอตทริบิวต์
และตัวอย่างที่เชื่อมโยงจาก StackOverflow นั้นไม่ค่อยดีนักเพราะมันจะทำซ้ำแบบสอบถามเดียวกันที่มีLIMIT
นิพจน์ต่างกัน สำหรับข้อความค้นหาที่ซับซ้อนอาจเป็นปัญหาด้านประสิทธิภาพ แต่สิ่งที่สำคัญกว่านั้นคือคุณจะได้รับข้อมูลซ้ำหากมีการเพิ่มแถวใหม่ในระหว่างนั้น
วิธีที่ดีกว่าในการจัดการกับคอลเลกชันเป็นชิ้นแรกโหลดรหัสทั้งหมดจากนั้นใช้รหัสเหล่านี้เป็นตัวกรองสำหรับคอลเลกชันเพจที่แท้จริง
ตัวอย่างง่ายๆสำหรับผลิตภัณฑ์:
$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());