【问题标题】:What's add_index used for in this code and more generally?这段代码中使用的 add_index 是什么?
【发布时间】:2013-11-24 06:49:58
【问题描述】:

我正在努力理解这段代码...它来自 Rails 教程手册,是​​制作类似 twitter 的应用程序的过程的一部分。

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
  • 既然只有 2 列(follower_id 和 follow_id),为什么 他们需要索引吗?
  • 索引是否以某种方式对它们进行排序?只是看起来有点奇怪 我要为有 2 列的表添加索引。
  • 索引对行有什么作用?
  • 索引是可选的吗?如果是这样,为什么/为什么不使用它?在上面的代码中使用它是不是一个好主意?

如果可以,请回答所有问题。我只是想弄清楚这个概念,在阅读后我有这些问题。

【问题讨论】:

    标签: ruby-on-rails database indexing


    【解决方案1】:

    既然只有 2 列(follower_id 和 follow_id),为什么要 需要索引吗?

    是否需要索引并不取决于列数。它用于加快查找速度。即使您的表只有一列,验证该列中是否存在特定值也需要您在最坏的情况下扫描整个表。有了索引就可以马上回答。

    索引是否以某种方式对它们进行排序?只是看起来有点奇怪 我要为有 2 列的表添加索引吗?

    不,通常索引不会以任何方式对表中的数据进行排序。我说“一般”是因为聚集索引确实对数据进行了排序。详情请见this question

    索引对行有什么作用?

    同样,一般情况下没有。不同的 DBMS 使用不同的机制将表中的行与索引相关联。索引是 DBA 工作中最重要的任务之一。如果您对此有基本的想法,那就太好了。阅读wikipedia article 了解基础知识。

    索引是可选的吗?如果是这样,为什么/为什么不使用它?

    是的,索引是可选的。当您看到查询性能下降时,您应该使用索引。同样,不同的 DBMS 为您提供不同的机制来监控您的查询性能,您应该进行监控以在性能下降超过阈值时提醒您。凭借经验,您将能够从一开始就清楚应用程序的大部分索引需求。

    在上面的代码中使用它是不是一个好主意?

    无法对此发表评论。每个应用程序的索引需求是不同的。您还应该注意过度索引的缺点。如果您有很多索引,您的更新、插入和删除操作会随着时间的推移而变慢,因为它们也需要更新您的索引。

    【讨论】:

      【解决方案2】:

      一列或一组列上的索引可加快对该列或一组列的查找速度。它的用处与表中的列数无关,因为它的目的是定位与列值关联的行。

      不,索引不对表格进行排序。

      索引不会对行“做”任何事情,但如果它是“唯一”索引,它将阻止创建/更新与相关列重复的行。

      索引是可选的。它加快了查找速度,但需要额外的时间进行写入操作。这是否是一个好主意完全取决于应用程序。

      【讨论】:

        猜你喜欢
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        • 2018-01-23
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多