我对模型关联中的索引列感到有些困惑。
(从钢轨4路)我们有User
,Timesheet
和Expense Report
模型。
该User
模型:
has_many: timesheets
has_many: expense_reports
(以及belongs_to
其他型号中的对应型号)
Rails 4 Way的书add_index
对timesheets
andexpense_reports
模型说:
add_index :timesheets, :user_id
add_index :expense_reports, :user_id
我不明白在每个外键列之后添加索引的原因。在timesheet
与expense_report
表已经有一个primary_key
列,为什么不说,用于“性能嘘声?” 添加两个额外的索引对我来说似乎很多余?有人可以解释一下好处吗?
我可以看到您的挫败感来自何处,只要继续前进,我相信您会很快得到解决的...
在数据库中创建列时,考虑是否需要从该列中查找和检索记录至关重要。因此,可以说我们有一个User表,每个用户都有一封email,在许多应用程序中,该表用于用户的身份验证和授权。当我们允许用户登录到我们的应用程序时,我们将需要查找与提交的电子邮件地址相对应的用户记录。不幸的是,通过电子邮件地址查找用户的唯一方法是扫描数据库中的每个用户行,并将其电子邮件属性与给定的电子邮件进行比较-因此,这意味着我们可能必须检查每一行(因为该用户可以数据库中的最后一个人)。可以想象,这将花费很多时间。简而言之,这不好。
在电子邮件列上放置索引可以解决此问题。可以将其视为本书结尾处的附录。在书中,要查找给定字符串的所有出现次数,例如“ foobar”,则必须在每个页面上扫描“ foobar”(全表扫描的纸质版本)。另一方面,有了书索引,您只需在索引中查找“ foobar”即可查看所有包含“ foobar”的页面。数据库索引的工作方式基本上相同。
我希望这能够帮到你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句