在我的应用程序中,我有一个对主题的回复表.结构大致如下:
CREATE TABLE responses ( id INT NOT NULL PRIMARY KEY,topic_id INT NOT NULL,author_id INT NOT NULL,response TEXT );
id是一个自动增量字段,topic_id和author_id是外键,有适当的索引等.
我总是想通过插入时间来订购,通常是最近的.在大多数情况下,我将按topic_id过滤.典型的查询如下所示:
SELECT * FROM responses WHERE topic_id=123 ORDER BY id DESC LIMIT 20; -- or,for pagination: SELECT * FROM responses WHERE topic_id=123 AND id < 456789 ORDER BY id DESC LIMIT 20;
我想实现一个阻止列表 – 每个用户都有一个他们不想看的author_id列表.我需要检索前20个结果,不包括那些回复它们的author_ids和响应.
确定是否应该排除一行是非常复杂的,虽然可能在数据库中执行此操作(在PL / sql中或通过预处理),但我希望将逻辑保留在应用程序中.所以我可以做两件事之一:
>忘记LIMIT子句,使查询无限制.吃行直到我计算20个有效结果,然后关闭查询.
>应用分块 – 指定LIMIT 40并希望它足以获得20“好”的结果.如果没有,请获取下一个40,依此类推.
两者之间有什么实际区别? ESP.在许多同时用户的性能方面.
我在Postgresql中这样做,但我愿意切换到不同的RDBMS. (我不想失去参照完整性,所以我不是在研究Nosql解决方案)也许我必须调整数据库的一些参数(例如预取大小),以充分利用无界查询案例?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。