我开始使用Zend_Paginator, 它工作得很好,但我注意到还有一个查询会减慢加载时间。 附加查询:
SELECT COUNT(1) AS `zend_paginator_row_count` FROM `content`
正常查询:
SELECT `content`.`id`, `content`.`name` FROM `content` LIMIT 2
PHP:
$adapter = new Zend_Paginator_Adapter_DbSelect($table->select()->from($table, array('id', 'name')));
$paginator = new Zend_Paginator($adapter);
我可以将两个查询合并为一个(为了更好的性能)吗?
答案 0 :(得分:1)
确保在所选表的一个或多个基于int的列上有索引。因此计数查询不会有很多性能影响。您可以使用setRowCount()
来提供计数(如果有的话)。
来自http://framework.zend.com/manual/en/zend.paginator.usage.html:
注意:而不是选择每一个 匹配给定查询的行, DbSelect和DbTableSelect适配器 只检索最小量的 显示所需的数据 当前页面。因此,a 第二个查询是动态生成的 确定总数 匹配行。但是,这是可能的 直接提供计数或计数 查询自己。查看setRowCount() DbSelect适配器中的方法 更多信息。
答案 1 :(得分:0)
如果有的话,合并这两者并不会带来太大的性能提升。实际的select内容中包含limit语句(当您尝试获取数据库中整个表的子集时),其中count需要计算数据库中的所有行。这样做的原因是为了防止必须选择一组非常大的数据才能获得计数。