【问题标题】:What is the purpose of non unique indexes in a database?数据库中非唯一索引的目的是什么?
【发布时间】:2014-10-20 11:16:23
【问题描述】:

我四处搜索,但似乎找不到数据库中唯一和非唯一索引概念背后的适当解释。

例如,在 Rails 中,您可以为给定字段创建唯一和非唯一索引,如 http://railsguides.net/advanced-rails-model-generators/ 中所述

我不明白的是:如果索引的目的是“设置快捷方式”到表中的值位置以便更快地访问它,那么多个值如何共享同一个索引?

例如,我将电子邮件存储在表格中,并且我想索引它们的值位置。 如果到目前为止我做对了,如果我有非唯一索引,那么数据库可以在位置 150 索引 foo@bar.com,并且在位置 150 索引 bar@foo.com。 因此,如果我最终在位置 150 有 100 个不同的值,如果数据库仍然必须搜索 150 处的所有值以找到我需要的确切记录,这是否会破坏首先建立索引的目的?

这有什么意义??

谢谢

【问题讨论】:

  • 是的,实际上我发现了那篇文章,但是对于基本问题,它是以一种不必要的复杂方式编写的,我问我无法通过它:“删除/禁用由如果您忘记了 KEEP INDEX 子句,自动创建的唯一索引会导致索引被删除”。 ...

标签: ruby-on-rails database unique-index


【解决方案1】:

我认为您对非唯一索引的含义有些困惑,为了澄清我将概述一些要点。

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

数据库索引实际上是一种存储(通常是排序的)数据的数据结构,并允许快速访问特定值,这就是默认情况下不创建索引的原因,因为这些数据结构占用空间并且应该只如果需要创建。如果您想探索这样的数据结构,可以查看B+ trees,这是索引中最常用的数据结构之一。

现在要解决非唯一索引的问题,需要指出的是,非唯一索引只是指非唯一表列的索引,因此索引可以包含多个相同的数据条目值,在这种情况下索引仍然非常有用,因为它允许快速遍历条目,即使有些条目具有重复值。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2023-03-08
      • 2013-05-13
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      相关资源
      最近更新 更多