gpt4 book ai didi

sql - has_many :through 的索引

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:08 26 4
gpt4 key购买 nike

假设您有两个模型,User 和 City,由第三个模型 CityPermission 加入:

class CityPermission < ActiveRecord::Base
belongs_to :city
belongs_to :user
end

class City < ActiveRecord::Base
has_many :city_permissions
has_many :users, :through => :city_permissions
end

class User < ActiveRecord::Base
has_many :city_permissions
has_many :cities, :through => :city_permissions
end

目前,我使用以下迁移代码片段创建连接表和表索引:

create_table :city_permissions do |t|
t.integer :user_id, :city_id
t.other_fields ...
end

add_index(:city_permissions, :user_id)
add_index(:city_permissions, :city_id)

这些是要创建的最佳索引吗?这些索引是否允许通过连接表来回快速访问,以及在表本身内进行快速查找,还是有其他更好的方法?换句话说,给定 cityuser 是 City 和 User 类的实例变量,这些索引是否允许 city.userscity.city_permissionsuser.citiesuser.city_permissions 都表现得一样好吗?

最佳答案

我觉得不错。

生成的连接应该只是在实体表的 PK ID 上,或者在连接表中的 FK ID 上——它们都是索引。

查看生成的 ActiveRecord SQL 并将其与索引进行比较可能会很好。

根据您使用的数据库,您可以通过解释计划(或任何存在的工具,我在这里考虑 Oracle)运行该 SQL

为了简化您的代码,您可以考虑使用 has_and_belongs_to_many以及。这会让你摆脱 CityPermission 对象(除非你想用它来存储数据本身)

关于sql - has_many :through 的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223804/

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