У меня есть рубин на Rails 4 приложение, используя devise и с моделью пользователя и модель сделки.Как использовать Rails для индексирования и запроса таблицы соединений?
Я создаю таблицу user_deals
для отношений has_many/has_many между пользователем и сделкой.
Здесь миграция
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
Когда пользователь загрузить сделки (например, идентификатор сделки = 4), я использую метод, называемый show
controllers/deal.rb
#for the view of the Deal page
def show
end
В связи с этим идентификатором сделки = 4 страницы, мне нужно отобразить nb видов Devise's 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
, который зарегистрировался (через devise's current_user
) и для deal_id
Rails знает, что мы находимся на самой странице этой сделки (показать страницу), поэтому я просто передаю ее как параметр.
Мне нужен индекс, чтобы ускорить его или нет?
Rails не делать что-либо с самой индексации. База данных управляет индексами и рельсами только делегаты для их создания. Так что это зависит от вашей базы данных. Я бы рекомендовал вам создавать индексы для внешних ключей, потому что они часто соединяются с другими таблицами. На мой взгляд, вы всегда должны создавать индексы для внешних ключей. И для многоколоночных индексов я бы использовал индекс только в том случае, если у меня есть ассоциация «многие-многие» или мне нужно проверить уникальность в определенной области. – Tobias