【发布时间】:2013-12-03 09:19:40
【问题描述】:
我有一个结构如下的表:
- Id (serial int) (关于这个的索引)
- 发布(文字)
- ...
- CreationDate (DateTime) (Desc index on this)
我需要实现分页。我的简单查询如下所示:
SELECT Id, Post, etc FROM Posts ORDER BY CreationDate desc OFFSET x LIMIT 15
当记录很少(低于 100 万)时,性能在某种程度上可以忍受,但当表增长时,就会有明显的差异。
跳过配置数据库设置(如缓存大小、工作内存、成本、共享内存等)的好处......可以做些什么来提高性能以及使用 Postgres 进行分页的最佳实践是什么。有类似的问题问here,但我不确定这是否也适用于我的情况。
由于我的Id 是自动递增的(如此可预测),我想的其他选择之一就是拥有这样的东西
SELECT Id, Post...FROM Posts WHERE Id > x and Id < y
但这似乎使事情变得复杂,我必须一直获取记录数,而且不能保证我总是会得到 15 条记录(例如,如果其中一个帖子已被删除并且 ID 不在“直”序列了)。
我也在考虑 CURSOR,但如果我没记错的话,CURSOR 会保持连接打开,这在我的情况下是不可接受的。
【问题讨论】:
标签: asp.net database postgresql pagination