Postgresql 分页数据查询踩坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Postgresql 分页数据查询踩坑相关的知识,希望对你有一定的参考价值。

参考技术A 一天,在查询数据的时候,发现数据少了一条, 然后去查找原因,发现SQL没有问题啊,百思不得其解,最后才发现原因出在排序字段上

Postgresql 排序字段如果不是Unique,就会随机排序,所以我们可以加入一个Unique字段,进行多字段排序就可以解决问题。

如何删除或更改postgresql上的cakephp分页计数查询?

我正在使用带有postgresql的cakephp。我的一些表非常大。当使用cakephp的分页时,它在大表上运行COUNT()然后查询实际结果。计数查询需要2.5分钟,而返回数据的实际查询需要95毫秒。

是否有可能不需要计数,或用可能更快的东西替换它?我不需要返回确切的行数,就像Google搜索返回约765,000的结果1-10的方式一样。

编辑:或者,有没有办法可以完全禁用计数?通常会有很多结果知道不需要多少页面。我需要的是一个“下一步”按钮,它增加了像蛋糕分页已经拥有的SQL OFFSET,如果下一页没有返回任何行,那就没问题了。

答案

我找到了绕过cakephp中的分页计数查询的方法。在要分页的模型中,您可以覆盖运行计数查询的函数,函数是paginateCount($conditions = null, $recursive = 0, $extra = array())

我使用以下代码来解决我的问题:

function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    return 0;
}

然后我在视图中编辑了分页以始终显示下一个按钮。转到没有结果的页面只会显示任何内容。

另一答案

官方文档使您能够强制蛋糕获取实际结果:http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html#custom-query-pagination

我希望它有所帮助:-)

以上是关于Postgresql 分页数据查询踩坑的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql分页Limit,如何将Mysql的分页转换为Postgresql的分页

Postgresql分页Limit,如何将Mysql的分页转换为Postgresql的分页

用于 JOIN 查询的 Postgresql 分页性能

3年部署3000套PG实例的架构设计与踩坑经验

如何删除或更改postgresql上的cakephp分页计数查询?

postgresql排序分页时数据重复问题