Rails - 优化数据库查询

时间:2017-01-14 14:28:38

标签: database postgresql database-design

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

我的主表当前有大约15万条记录......而且预计会增长到超过100万......甚至可能超过1000万。这些记录属于可以被用户阻止的父级。当父级被阻止时,在父级被解除阻塞之前,子级不应再在任何视图中可见。用户可以拥有超过100个或更多被阻止的父母......

目前,我有一个范围接收一系列被阻止的parent_id ...

scope :parent_filter, ->(parent_ids) { where.not(parent_id: [*parent_ids]) }

parent_id在子表中编入索引。

这导致查询时间约为250-350ms .... 有一个更好的方法吗?我想也许是与父母进行3方式连接,而parent_child表可能会更好......但不确定。

如果它有所作为,我就花在$ 7 Dyno& $ 9 Postgres现在...... 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

如果您已经这样做了:

这听起来可能不合适,但根据我的经验,90%的慢速查询可以通过应用程序级缓存(特别是模型缓存和俄语玩偶缓存)来解决

根据我的经验(以及许多其他Rails开发人员的经验,例如来自Ruby Rouges podcast邀请发言的人)你可以花几周时间优化SQL查询,你需要做的只是缓存一部分一个复杂的网络应用程序。

更新

还请检查“物化视图”https://www.sitepoint.com/speed-up-with-materialized-views-on-postgresql-and-rails/,这也可能提升PosgreSQL速度