Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 祖先树宝石:通过外键确定记录范围以提高性能?_Postgresql_Ruby On Rails 4_Ancestry - Fatal编程技术网

Postgresql 祖先树宝石:通过外键确定记录范围以提高性能?

Postgresql 祖先树宝石:通过外键确定记录范围以提高性能?,postgresql,ruby-on-rails-4,ancestry,Postgresql,Ruby On Rails 4,Ancestry,我正在使用ruby gem祖先模型来模拟一个“参考朋友”式的“向前支付”结构 在我的表中,我创建了许多不同的树,它们是外键event_id所独有的。每个event_id都有一个根节点,然后是它的后代 我目前有索引: add_index :promoters, :ancestry add_index :promoters, :event_id 简单 查询变得非常慢。。。查询第一个子级节点的时间超过350毫秒 我想知道是否最好创建一个新的索引,比如 add_index :promoters, [:

我正在使用ruby gem祖先模型来模拟一个“参考朋友”式的“向前支付”结构

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

我目前有索引:

add_index :promoters, :ancestry
add_index :promoters, :event_id
简单

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

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

add_index :promoters, [:event_id, :ancestry]
我的理解是,这可以极大地加快LIKE查询的速度,因为它可以首先将表缩减为事件id的记录

数据库是Heroku上的Postgres,Rails 4.1

谢谢,如果有其他更好的方法,请提出建议

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

查询一级节点:

ancestry = '22333433'
查询节点的所有子代:

ancestry LIKE '22333433/%'

gem基本上以字符串形式存储到节点的路径,用“/”之类的查询分隔节点的ID以到达该节点?祖先柱是什么样子的?这个gem是否碰巧使用了某种可移植的CSV-in-a-column怪物?另外,祖先生成什么样的SQL查询?如果希望优化这些内容,您需要了解SQL级别的工作方式。我添加了一些关于祖先列如何工作的更多信息您必须使用祖先吗?也许对SQL中的树进行一些研究,选择最适合您的使用模式的树,并注意希望使用递归CTE的表示,因为PostgreSQL支持这些表示。