2014-10-20 114 views
3

我搜索了四周,但我似乎无法找到一个适当的解释背后的唯一和非唯一索引的概念在数据库中。数据库中非唯一索引的用途是什么?

在Rails中,例如,可以为某一领域创造独特和非唯一索引,截至http://railsguides.net/advanced-rails-model-generators/

解释什么,我不明白的是:如果一个指数的目的是为了“设置快捷方式“添加到表格中的值位置以便更快地访问它,那么多个值如何共享相同的索引?

说例如我在一个表中存储电子邮件,我想索引他们的值位置。 如果到目前为止我的判断是正确的,如果我有非唯一索引,那么数据库可能在[email protected]索引150位,[email protected]索引150位。 因此,如果我最终得到在位置150处说出100个不同的值,如果DB仍然需要在150处搜索所有值以找到我需要的确切记录,那么这不会首先破坏索引的目的吗?

这是怎么回事?

感谢

+0

看看这个http://richardfoote.wordpress.com/2007/12/18/differences-between-unique-and-non-unique-indexes-part-i/ – 2014-10-20 11:24:48

+0

是的,其实我发现那篇文章,但是它被写成这样一种基本问题的不必要的复制方式,我要求我不能通过它:“放弃/禁用由自动创建的唯一索引管理的约束会导致索引在您忘记KEEP INDEX时被删除条款”。 ... – 2014-10-20 11:41:16

回答

1

在数据模型为您例如电子邮件应用程序,将没有意义的非唯一索引添加到位置属性,因为每个消息都只有一个位置,每个位置只包含一个消息;在这种情况下,索引应该是唯一的。

但考虑一个可能的“发件人”属性。许多消息可能来自同一个发件人。如果您的应用程序具有查找来自特定发件人的所有邮件的功能,那么在发件人列中添加非唯一索引以提高该操作的性能是有意义的。

2

我想你对于非唯一索引的含义有些困惑,为了澄清我将概述一些观点。

数据库索引不是与数组索引相同的索引,数据库中的索引值不一定与特定数字(或“索引”)关联。

数据库索引实际上是一个数据结构,它存储(通常是排序的)数据,并允许快速访问特定的值,这就是索引不是默认创建的原因,因为这些数据结构占用了空间必要时创建。如果你想探索这样的数据结构,你可以看看B+ trees,这是索引中最常用的数据结构之一。

现在为了解决非唯一索引的概念,应该指出,非唯一索引仅仅意味着非唯一表列的索引,因此索引可以包含多个数据条目相同的值,在这种情况下,索引仍然非常有用,因为它可以快速遍历条目,即使某些条目具有重复值。

我希望我已经帮助澄清了至少一点,如果我误解了任何部分,请纠正我。

相关问题