zend paginator最终会使用LIMIT OFFSET

时间:2011-09-12 00:50:09

标签: php mysql zend-framework

所以我目前正在使用Zend Paginator,因为我的印象是它最终没有使用LIMIT x OFFSET yLIMIT x,y查询,因此即使我试图寻找页面也是有效的99999因为LIMIT OFFSET需要搜索从第一个到第99999页的所有项目,如果我使用LIMIT OFFSET ...我在这个假设中是正确还是不正确?

2 个答案:

答案 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