Zend Framework:需要有关实现Zend_Paginator_Adapter count()的建议

时间:2010-08-19 14:56:15

标签: performance zend-framework

我想实现自己的Zend_Paginator_Adapter,所以我实施了Zend_Paginator_Adapter_Interfacedocs)。我现在正在实施count()。我是对的,如果我的查询是

SELECT * FROM Posts LIMIT ... // where limit is for pagination purposes

我需要获取表格中的总行数(在count()中返回)?

SELECT COUNT(*) FROM Posts

有两个查询似乎不可避免?我并不太关心我目前的关于性能的项目,但需要2个查询,只是让我想到,所以我想问这里

1 个答案:

答案 0 :(得分:3)

  
    

我是否可以说...获取表格中的总行数(以count()返回)?
    SELECT COUNT(*)FROM Posts

  

这肯定是获得所需结果的一种方法。假设您的表/索引已经优化,运行第二个查询并不是那么糟糕。

还有另一种选择。您可以在原始查询中包含语句“SQL_CALC_FOUND_ROWS”,然后您的第二个查询将仅包含:

“SELECT FOUND_ROWS();”

有关此功能的更多信息,请参阅以下链接: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

当然,这假设您使用的是MySQL。

  
    

我不太关心我目前关于性能的项目,但是需要2个查询,只是让我想到......

  

这肯定是一个有效的问题,特别是随着记录数量的增加。 Zend_Paginator令人敬畏的是你能做到的事实 注入一个Zend_Cache_Core实例。这将确保您只根据您的时间长度运行这些查询的次数最少 缓存生命周期是。

有关缓存功能的详细信息,请参阅以下页面: http://framework.zend.com/manual/en/zend.paginator.advanced.html#zend.paginator.advanced.caching