我正在使用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
谢谢!
答案 0 :(得分:7)
在type
字段上,如果您只想要MovieComment
或MagazineComment
中的一个。如果你不这样做,你不需要这里的索引。我不确定AR是否每次都使用type
,但只是为了确保。
因为id
字段是主键,所以索引应该已存在。
如果您想同时通过type
和id
进行查询,请确保您拥有综合索引。
在其他字段上:取决于您查询的内容,但我想您只想检索这些内容。
答案 1 :(得分:0)
通常,您需要在执行查询时使用的列中包含索引。
如果您执行MovieComment.find(10)
,数据库将使用Rails将自动为您添加的id
字段中的索引。如果您执行Comment.find(30)
,则相同:Rails将使用索引检索id
30的推荐,然后它将读取type
列,它将返回MovieComment
或{ {1}}。
例如,如果要添加要按标题搜索的功能,则还必须在此列中创建索引。在这种情况下,可能是:fulltext 索引。
MagazineComment
列中的索引会使type
之类的查询更快,因为它等同于MagazineComment.all
,但可能不值得。