如何在外键上添加索引?

时间:2011-12-15 01:32:09

标签: ruby-on-rails database database-design foreign-keys

我刚刚发现,为了防止在连接期间进行全表扫描,我需要在rails应用程序中为我的外键添加索引。但我不确定究竟是什么为外键添加索引意味着什么,它是如何工作的,以及它如何提升性能。

2 个答案:

答案 0 :(得分:2)

我认为维基百科对索引的内容和行为有很好的总结。见这里:http://en.wikipedia.org/wiki/Index_%28database%29

索引可以/确实增加数据库的大小。他们有效地缓存了您的数据订单。根据外键关系建立索引时,您将缓存表的默认排序,这可以减少需要在表中搜索的项目的大小,或者可以加快连接速度。

考虑这个人为的例子:

我有一张名为employee的表:

员工ID |员工代码|员工姓名

1 | 0003 |理查德
2 | 0002 |鲍勃
3 | 0008 |蒂姆

我想加入一个有序员工代码列表:

0003 0008

这意味着没有索引你就有了搜索O(n2)的效率。通过Employee Code排序的表,您可以看到二叉搜索树给出的搜索效率:http://en.wikipedia.org/wiki/Binary_search_algorithm。有效地,它可以通过猜测它的位置找到0003并发现它变得越来越接近,而不是搜索每一行。

我不是说你的数据库使用的是任何特定的算法,但有些算法需要按键排序数据才能进行更有效的搜索。

您可能希望在不再需要索引时考虑删除索引,因为它会影响数据库大小。

答案 1 :(得分:0)

它与任何其他领域的索引没有什么不同。它可能有助于优化器在这些表中查找特定的行。 FK通常用作连接字段,因此在这些情况下它们是索引的自然候选者。