首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZF2分页器性能与fetchAll无限制?

ZF2分页器性能与fetchAll无限制?
EN

Stack Overflow用户
提问于 2013-04-19 14:23:06
回答 1查看 1.4K关注 0票数 1

大多数情况下,in ZF2 I会执行这样的分页器:

代码语言:javascript
复制
public function fetchAll()
{
 $resultSet = $this->tableGateway->select();
 return $resultSet;
}

$iteratorAdapter = new \Zend\Paginator\Adapter\Iterator($this->getSampleTable()->fetchAll());
$paginator = new \Zend\Paginator\Paginator($iteratorAdapter);

这个问题在于它没有限制查询结果,fetchAll返回所有结果(在db和php之间产生很大的交易)。

在纯php中,我将执行如下分页:

代码语言:javascript
复制
$PAGE_NUM = $_GET['page_num'];
$result_num = mysq_query("SELECT * FROM table WHERE some condition");
$result = mysq_query("SELECT * FROM table WHERE some condition LIMIT $PAGE_NUM, 20");
echo do_paginator($result_num, 20, $PAGE_NUM);//THIS JUST MAKE THE CLASSIC < 1 2 3 4 5 >

这样做的好处是,由于mysql中的限制选项,我只从DB获取分页中所需的数据。这在返回太多记录的查询上具有良好的性能。

我可以使用对结果的有效限制的ZF2分页器,或者我需要自己的分页器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-19 14:54:55

使用Zend\Paginator\Adapter\DbSelect适配器,它将完全按照您的要求执行,首先对您给它的查询应用限制和偏移,然后只获取这些记录。

此外,此适配器不会从数据库中提取所有记录以便对它们进行计数。相反,适配器操作原始查询以生成相应的计数查询。然后,分页器执行该计数查询以获取行数。这确实需要对数据库进行额外的往返,但是这比获取整个结果集和使用count()快很多倍,特别是对于大量的数据集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16106893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档