使用STI时索引在哪里?

时间:2011-12-28 05:48:12

标签: ruby-on-rails database postgresql single-table-inheritance sti

我正在使用Rails和postgres。

我有几个使用STI的模型,我想知道我应该在表上放置索引以及为什么?

例如,假设我有以下设置:

class Comment < AR; end
class MovieComment < Comment; end
class MagazineComment < Comment; end


# Fake Comment Table
id:integer
title:string
body:text
type:string

谢谢!

2 个答案:

答案 0 :(得分:7)

type字段上,如果您只想要MovieCommentMagazineComment中的一个。如果你不这样做,你不需要这里的索引。我不确定AR是否每次都使用type,但只是为了确保。

因为id字段是主键,所以索引应该已存在。

如果您想同时通过typeid进行查询,请确保您拥有综合索引。

在其他字段上:取决于您查询的内容,但我想您只想检索这些内容。

答案 1 :(得分:0)

通常,您需要在执行查询时使用的列中包含索引。

如果您执行MovieComment.find(10),数据库将使用Rails将自动为您添加的id字段中的索引。如果您执行Comment.find(30),则相同:Rails将使用索引检索id 30的推荐,然后它将读取type列,它将返回MovieComment或{ {1}}。

例如,如果要添加要按标题搜索的功能,则还必须在此列中创建索引。在这种情况下,可能是:fulltext 索引。

MagazineComment列中的索引会使type之类的查询更快,因为它等同于MagazineComment.all,但可能不值得。