add_index 到数据模型 - Ruby on Rails 教程
Posted
技术标签:
【中文标题】add_index 到数据模型 - Ruby on Rails 教程【英文标题】:add_index to Data Model - Ruby on Rails Tutorial 【发布时间】:2013-11-22 20:17:50 【问题描述】:我只是有点卡在 Ruby on Rails Tutorial.org 中的这段代码上。它的 add_index 部分究竟是做什么的?为什么有 3 行?
class CreateRelationships < ActiveRecord::Migration
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :followed_id
t.timestamps
end
add_index :relationships, :follower_id
add_index :relationships, :followed_id
add_index :relationships, [:follower_id, :followed_id], unique: true
end
end
【问题讨论】:
【参考方案1】:数据库索引是一种数据结构,可以提高查询速度 表中的操作。可以使用一个或多个创建索引 列,为快速随机查找和 记录访问的有效排序。 - TutorialPoint
基本上是用来加速查询的索引。
在示例中
add_index :relationships, :follower_id
add_index :relationships, :followed_id
为follower_id
和followed_id
列创建索引,这将加快查找follower_id
OR followed_id
的查询。它不会对您的列实施任何其他约束,例如 UNIQUE。所以它们可以有相同的值
这里
add_index :relationships, [:follower_id, :followed_id], unique: true
过程与上述相同,但约束条件是 follower_id
AND followed_id
组合应该是不同的。如果您尝试在多行中为这些列复制相同的组合值,则会引发错误。
【讨论】:
感谢您的评论,那么我能否将索引与喜欢一本书的内容或一本书的“索引”进行比较,这样可以更快地找到可以缩小到信息范围的区域(表D b)?上述索引对于查询数据库是否实用且必要?为什么,为什么不呢? 是的,缩小信息范围会更快,但唯一的缺点是每当您添加/编辑行时,索引都需要时间。 好的,谢谢,但由于它们只有 2 列(follower_id 和 follow_id),为什么它们需要索引? (对不起,我只是想弄清楚它)。索引是否以某种方式对它们进行排序?向具有 2 列的表添加索引对我来说似乎有点奇怪,索引对行有什么作用?非常感谢您的帮助:) 没有。列或行无关紧要创建索引完全取决于您的选择。检查这个mysqlperformanceblog.com/2006/06/02/indexes-in-mysql @barlop 我说的是概念性的。在实践中,数据库维护 b 树以在 rid 表中记录数字。当数据库删除一条记录时,它会从表的每个索引中删除记录的条目,就像添加记录时它会将条目添加到 b 树中一样。因此,索引会减慢影响索引的插入、删除和更新,但会加快查询速度。以上是关于add_index 到数据模型 - Ruby on Rails 教程的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ruby on Rails 将数据从控制器传递到模型?
将重复的SQL模型复制到Ruby on Rails postgresql模型中