我的表格结构如下:
我需要实施分页。我的简单查询如下:
SELECT Id, Post, etc FROM Posts ORDER BY CreationDate desc OFFSET x LIMIT 15
当记录很少(低于1百万)时,性能有点可忍受,但当表增长时会有明显的差异。
省略了配置数据库设置(如缓存大小,工作内存,成本,共享内存等)的好处......可以采取哪些措施来提高性能以及使用Postgres进行分页的最佳做法。有类似的问题here,但我不确定这是否也适用于我的情况。
由于我的Id
自动递增(如此可预测),我想到的其他选项之一就是有这样的东西
SELECT Id, Post...FROM Posts WHERE Id > x and Id < y
但这似乎使事情变得复杂,我必须一直得到记录的数量,而且不能保证我总会得到15条记录(例如,如果其中一个帖子被删除而且Ids不在“直”序列了。
我也在想CURSOR,但如果我没有错,CURSOR将保持连接打开,这在我的情况下是不可接受的。
答案 0 :(得分:2)
分页很难; RDBMS模型不适合大量具有有状态滚动的短期查询。如你所知,资源使用往往过高。
您可以选择:
LIMIT
和OFFSET
x > id
和LIMIT
其中,我更喜欢x > id
和LIMIT
。记住你看到的最后一个ID,并要求下一个ID。如果你有一个单调递增的序列,这将是简单,可靠的,并且对于简单的查询,它将是有效的。