【发布时间】:2015-11-26 19:48:12
【问题描述】:
我有一个 ruby on Rails 4 应用程序,使用 devise 以及 User 模型和 Deal 模型。
我正在为 User 和 Deal 之间的 has_many/has_many 关系创建一个 user_deals 表。
这里是迁移
class CreateUserDeals < ActiveRecord::Migration
def change
create_table :user_deals do |t|
t.belongs_to :user
t.belongs_to :deal
t.integer :nb_views
t.timestamps
end
end
end
当用户加载一个 Deal(例如 Deal id=4)时,我使用了一个名为show的方法
controllers/deal.rb
#for the view of the Deal page
def show
end
在此 Deal id=4 页面的视图中,我需要在用户当前所在的 Deal 页面内显示 Devise 的current_user 的浏览次数 。
deal/show.html
here is the nb of views of user: <% current_user.#{deal_id}.nb_views%>
假设我有 10M+ user_deals 行,我想知道是否应该使用索引
add_index :user_deals, :user_id
add_index :user_deals, :deal_id
或许
add_index(:deals, [:user_id, deal_id])
确实在其他情况下我会说是的,但在这里我不知道 Rails 是如何在幕后工作的。感觉好像 Rails 知道在我不需要加快进程的情况下该怎么做,......好像当 Rails 加载此视图时没有 SQL 查询(例如'找到视图的 nb WHERe user_id= x 和deal_id= Y')....因为我只用于登录的current_user(通过设计的current_user)和deal_id Rails 知道这一点,因为我们在这笔交易的页面上(显示页面)所以我只是将它作为参数传递。
那么我是否需要一个索引来加速它?
【问题讨论】:
-
Rails 对索引本身没有任何作用。数据库管理索引,rails 仅代表创建它们。所以这取决于你的数据库。我建议您为外键创建索引,因为它们经常连接到其他表。在我看来,您应该始终为外键创建索引。对于多列索引,只有当我有
many to many关联或者我必须检查特定范围内的唯一性时,我才会使用索引。
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord devise