jj_*_*jj_ 5 database ruby-on-rails unique-index
我一直在搜索,但似乎无法在数据库中找到唯一和非唯一索引概念背后的适当解释.
例如,在Rails中,您可以为给定字段创建唯一且非唯一的索引,如http://railsguides.net/advanced-rails-model-generators/中所述.
我不明白的是:如果索引的目的是"设置快捷方式"到表中的值位置以便更快地访问它,那么多个值如何共享相同的索引?
比方说,我将电子邮件存储在一个表中,我想索引它们的值位置.如果到目前为止我做得对,如果我有非唯一索引,那么DB可以将foo @ bar.com索引到位置150并且bar @foo.com也索引到位置150.所以如果我最终说100在位置150处的不同值,如果DB仍然必须搜索150处的所有值以找到我需要的确切记录,这不会首先破坏索引的目的吗?
这有什么意义?
谢谢
小智 8
我认为你对一个非独特的指数意味着什么有点困惑,为了澄清我将概述一些观点.
数据库索引不是与数组索引相同意义上的索引,数据库中的索引值不一定与特定数字(或"索引")相关联.
数据库索引实际上是一种存储(通常是已排序的)数据的数据结构,并允许快速访问特定值,这是默认情况下不创建索引的原因,因为这些数据结构占用空间并且只应在需要时创建.如果您想探索这样的数据结构,可以查看B +树,它们是索引中最常用的数据结构之一.
现在要解决非唯一索引的概念,应该指出非唯一索引只是指非唯一表列的索引,因此索引可以包含多个具有相同值的数据条目,在哪种情况下,索引仍然非常有用,因为它允许快速遍历条目,即使某些条目具有重复值.
我希望我已经帮助澄清了至少一点,如果我在任何部分都弄错了,请纠正我.
在示例电子邮件应用程序的数据模型中,向位置属性添加非唯一索引是没有意义的,因为每条消息都只有一个位置,而每个位置只包含一条消息;在这种情况下,索引应该是唯一的。
但考虑一个可能的“发件人”属性。许多消息可以来自同一个发件人。如果您的应用程序具有查找来自特定发件人的所有消息的功能,那么在发件人列上添加非唯一索引以提高该操作的性能是有意义的。
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |