Database Rails-优化数据库查询

Database Rails-优化数据库查询,database,postgresql,database-design,Database,Postgresql,Database Design,我正处于新宠物项目MVP的最后阶段。。。并尝试改进查询时间 我的主表当前有大约150k条记录。。。预计将增长到超过100万。。。甚至可能超过1000万。这些记录属于用户可以阻止的父项。当父对象被阻止时,在父对象被取消阻止之前,子对象不应再在任何视图中可见。用户最多可以有100个或更多被阻止的家长 目前,我有一个作用域,它接收一个阻塞的父\u ID数组 scope :parent_filter, ->(parent_ids) { where.not(parent_id: [*parent_i

我正处于新宠物项目MVP的最后阶段。。。并尝试改进查询时间

我的主表当前有大约150k条记录。。。预计将增长到超过100万。。。甚至可能超过1000万。这些记录属于用户可以阻止的父项。当父对象被阻止时,在父对象被取消阻止之前,子对象不应再在任何视图中可见。用户最多可以有100个或更多被阻止的家长

目前,我有一个作用域,它接收一个阻塞的父\u ID数组

scope :parent_filter, ->(parent_ids) { where.not(parent_id: [*parent_ids]) }
父\u id在子表中编制索引

这导致查询时间约为250-350毫秒。。。。 有更好的方法吗?我在想,使用parent和parent_-child表的3路联接可能会更好。。。但不确定

如果有区别的话,我现在在7美元的Dyno和9美元的Postgres上。。。
任何帮助都将不胜感激

在大多数情况下,您需要做的就是实现数据库索引

如果您已经这样做了:

这听起来有点离题,但根据我的经验,90%的慢速查询可以通过应用程序级缓存(尤其是模型缓存和俄罗斯玩偶缓存)来解决

根据我和许多其他Rails开发人员的经验,例如People邀请您在会上发言的内容,您可以花数周时间优化SQL查询,而您所需要做的只是缓存复杂web应用程序的一部分

更新


另外,请检查也可能提高PosgreSQL速度的物化视图

嘿,父id被索引了。。。。我正在使用尽可能多的视图缓存,因为我已经能够找到-只有视图/俄罗斯娃娃缓存到目前为止。。。我的应用程序目前需要获取参数。。。这不适合缓存。。。在这个项目中,我经历了很多你之前描述的事情。。。它确实帮了很多忙。。。加载主对象索引页面时,只需执行一个查询,速度似乎非常慢,尤其是在使用了该范围的情况下。没有该范围:加载163.8ms:加载224.9ms我希望是由于9美元的heroku db似乎没有RAM。。。。但每次我都认为,到目前为止,结果证明我没有做错什么。我的默认排序列缺少一个索引。。。。谢谢大家!!!没问题@tkz79很乐意帮忙。我已经用物化视图更新了答案,这可能也会有所帮助