所以我目前正在使用Zend Paginator,因为我的印象是它最终没有使用LIMIT x OFFSET y
或LIMIT x,y
查询,因此即使我试图寻找页面也是有效的99999因为LIMIT OFFSET需要搜索从第一个到第99999页的所有项目,如果我使用LIMIT OFFSET ...我在这个假设中是正确还是不正确?
答案 0 :(得分:7)
是的,在DbSelect和DbTableSelect适配器中,Zend_Paginator设置LIMIT和OFFSET(或等效语法,由Db适配器确定)。在两个适配器中,将显示以下行:
...
$this->_select->limit($itemCountPerPage, $offset);
...
有关详细信息,请阅读库/ Zend / Paginator / Adapter / Db * Select.php中的代码。
在MySQL中,使用大型OFFSET的查询运行速度较慢是对的。
还有其他优化分页的技巧 见http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/
答案 1 :(得分:1)
不,Zend_Paginator忽略了查询中的自定义OFFSET。所以,如果你使用这样的代码:
Zend_Paginator::factory(..->select()->from('a', 'b')->where('c')->limit(5,1));
Zend_Paginator将忽略您的偏移量。但是你可以为ZP创建自己的适配器。
P.S。版本1.11.10