我有几个这样的模型:
User has_many :orders
Order belongs_to :user
我一直在读索引可以加速更大的查询,这一切都有意义,但我不明白我应该如何在joins
或includes
上设置索引。
因此,如果我有查询Order.joins(:user).where(order_status: "Cancelled")
,我将如何使用add_index
来优化此查询?我假设相同的逻辑适用于Order.includes(:user).where(order_status: "Cancelled")
。提前致谢。
答案 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将处理其余的