add_index Ruby on Rails加入

时间:2018-03-07 14:15:36

标签: ruby-on-rails ruby

我有几个这样的模型:

User has_many :orders
Order belongs_to :user

我一直在读索引可以加速更大的查询,这一切都有意义,但我不明白我应该如何在joinsincludes上设置索引。

因此,如果我有查询Order.joins(:user).where(order_status: "Cancelled"),我将如何使用add_index来优化此查询?我假设相同的逻辑适用于Order.includes(:user).where(order_status: "Cancelled")。提前致谢。

2 个答案:

答案 0 :(得分:1)

当您向迁移添加表引用时,rails将自动为外键添加索引。在这种情况下,如果您查看user_id文件,schema.rb就会被编入索引。

现在为了加快查询速度,您必须在订单表中添加order_status的索引。

rails g migration AddOrderStatusIndexToOrders

def change
  add_index :orders, :order_status
end

如果您想稍后删除索引,可以像

一样完成
def change
  remove_index :orders, :order_status
end

答案 1 :(得分:0)

您在迁移中添加索引:

def eat(health,p,a):
    print('choose a or b')
    food=input('>')
    if food == 'a':
        health -= int(p)
    elif food == 'b':
        health += int(a)
    else:
        print('choose one among a and b')
    return health
def Hero(name,health,p,a):
    print(name,health)
    health = eat(int(health),p,a)
    print(health)
Hero('Bob',100,10,5)
Hero('Ham',500,60,10)

就是这样,Rails将处理其余的