我刚刚发现,为了防止在连接期间进行全表扫描,我需要在rails应用程序中为我的外键添加索引。但我不确定究竟是什么为外键添加索引意味着什么,它是如何工作的,以及它如何提升性能。
答案 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通常用作连接字段,因此在这些情况下它们是索引的自然候选者。