gpt4 book ai didi

ruby-on-rails - 如何在Rails联接表迁移上正确索引字段?

转载 作者:行者123 更新时间:2023-12-04 07:53:04 24 4
gpt4 key购买 nike

Rails 4引入了用于生成联接表迁移的功能:

bin/rails generate migration CreateTeamsUsersJoinTable team user

这将导致以下文件:
class CreateTeamsUsersJoinTable < ActiveRecord::Migration
def change
create_join_table :teams, :users do |t|
# t.index [:team_id, :user_id]
# t.index [:user_id, :team_id]
end
end
end

您可以看到索引已被注释掉。为什么是这样?我是否应该决定要使用哪一个?还是暗示索引是可选的?我想确保每个字段上都有某种索引以避免性能问题,但是我不确定如何为这些字段正确定义索引。

最佳答案

要完成xlembouras答案,请根据查询表的方式进行选择。

例如,如果您有一个显示给定团队的用户的 View ,则查询将如下所示:

SELECT user.name FROM team_users tu 
INNER JOIN users u
ON tu.user_id = u.id
WHERE tu.team_id = X

这得益于 t.index [:team_id, :user_id]而不是 t.index [:user_id, :team_id]
数据库将仅在第一个索引上使用一个索引查找来检索用户标识

如果您有一个显示给定用户团队的 View ,则查询将类似于以下内容:
SELECT team.name FROM team_users tu 
INNER JOIN team t
ON tu.team_id = t.id
WHERE u.user_id = X

这得益于 t.index [:user_id, :team_id]而不是 t.index [:team_id, :user_id]
数据库将仅在第一个索引上使用一个索引查找来检索团队ID

那是因为组成索引的存储方式:

关于ruby-on-rails - 如何在Rails联接表迁移上正确索引字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075782/

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