我正在使用红宝石宝石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的记录。
数据库是Herg上的Postgres,Rails 4.1。
谢谢,如果有其他选择/更好的方法,请提出建议。
编辑:添加有关LIKE查询的更多信息
查询第一级节点:
ancestry = '22333433'
查询节点的所有后代(间接):
ancestry LIKE '22333433/%'
gem基本上将节点的路径存储为字符串,将节点的id分隔为带有' /'
的节点