1

我正在使用 ruby​​ gem Ancestry ( https://github.com/stefankroes/ancestry ) 来模拟推荐朋友“向前支付”的结构。

在我的表中,我创建了许多不同的树,外键 event_id 是唯一的。每个 event_id 都有一个根节点,然后是它的后代。

我目前有索引:

add_index :promoters, :ancestry
add_index :promoters, :event_id

简单的。

查询变得非常缓慢......查询第一个子级节点的时间超过 350 毫秒。

我想知道是否最好创建一个新索引,例如,

add_index :promoters, [:event_id, :ancestry]

我的理解是,这可以显着加快 LIKE 查询,因为它可以首先将表减少到 event_id 的记录。

数据库是 Heroku 上的 Postgres、Rails 4.1。

谢谢,如果有任何替代/更好的方法,请提出建议。

编辑:添加有关 LIKE 查询的更多信息

查询一级节点:

ancestry = '22333433'

查询节点的所有后代(间接):

ancestry LIKE '22333433/%'

gem 基本上将节点的路径存储为字符串,用 '/' 分隔节点的 id 以到达该节点

4

0 回答 0