gpt4 book ai didi

mysql - 何时在 Rails 中的表中添加哪些索引

转载 作者:IT老高 更新时间:2023-10-28 12:49:54 27 4
gpt4 key购买 nike

我有一个关于 Rails 数据库的问题。

  • 我应该将“index”添加到像“xxx_id”这样的所有外键吗?
  • 我应该在自动创建的“id”列中添加“index”吗?
  • 我应该将“index(unique)”添加到自动创建的“id”列吗?

  • 如果我同时为两个外键添加索引(add_index (:users, [:category, :state_id]),会发生什么?这与为每个键?

    class CreateUsers < ActiveRecord::Migration
    def self.up
    create_table :users do |t|
    t.string :name
    t.integer :category_id
    t.integer :state_id
    t.string :email
    t.boolean :activated
    t.timestamps
    end
    # Do I need this? Is it meaningless to add the index to the primary key?
    # If so, do I need :unique => true ?
    add_index :users, :id
    # I don't think I need ":unique => true here", right?
    add_index :users, :category_id # Should I need this?
    add_index :users, :state_id # Should I need this?
    # Are the above the same as the following?
    add_index (:users, [:category, :state_id])
    end
    end

到目前为止,答案很好。附加问题。

  • 我应该为 xxx_id 添加“唯一索引”,对吗?

最佳答案

Should I add "index" to all the foreign keys like "xxx_id"?

这样会更好,因为它加速了该列中排序的搜索。外键搜索量很大。

从第 5 版开始,索引将自动创建,更多信息请参见 here .

Should I add "index" to the automatically created "id" column?

不,这已经由 rails 完成了

Should I add "index(unique)" to the automatically created "id" column?

不,同上

If I add index to two foreign keys at once (add_index (:users, [:category_id, :state_id]), what happens? How is this different from adding the index for each key?

那么索引就是两列的组合索引。这没有任何意义,除非您想要一个 category_id AND 一个 state_id 的所有条目(它应该是 category_id 不是 category)。

这样的索引会加快以下请求的速度:

# rails 2
User.find(:all, :conditions => { :state_id => some_id, :category_id => some_other_id })

# rails 3
User.where(:state_id => some_id, :category_id => some_other_id)

在哪里

add_index :users, :category_id
add_index :users, :state_id

将加快这些请求:

# rails 2+3
User.find_by_category_id(some_id)
User.find_by_state_id(some_other_id)

# or
# rails 2
User.find(:all, :conditions => {:category_id => some_id})
User.find(:all, :conditions => {:state_id => some_other_id})

# rails 3
User.where(:category_id => some_id)
User.where(:state_id => some_other_id)

I should add "index with unique" for xxx_id, right?

不,因为如果这样做,一个类别只能有一个用户,但类别的含义是您可以将更多许多用户归入一个类别。在您的 User 模型中,您有类似 belongs_to :category 的内容,而在您的 Category 模型中有类似 has_many :users 的内容。如果您有 has_many 关系,则 foreign_key 字段不能是唯一的!

有关这方面的更多详细信息,您应该查看 tadman很棒answer .

关于mysql - 何时在 Rails 中的表中添加哪些索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3658859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com