我正在应用程序中进行一些分页操作,使用PostgreSQL的标准OFFSET和LIMIT关键字每次从数据库返回20行。例如,要获取第一页:
SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20
应用程序要求我们向用户显示记录的总数。因此,很明显,我可以通过发出单独的查询来获取总数:
SELECT COUNT(*) FROM table WHERE condition
但是如果有大量的行,那么这不是最优的解决方案。我注意到MySQL有一个非常有用的函数叫做FOUND_ROWS(),正好符合我的要求:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows
PostgreSQL中有类似的功能吗?
count(*) OVER() AS total_count
会为每一行执行吗?例如,如果有20行,它会被计算20次,还是只计算一次? - tylik