2014-10-20 46 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,這是索引中最常用的數據結構之一。

現在爲了解決非唯一索引的概念,應該指出,非唯一索引僅僅意味着非唯一表列的索引,因此索引可以包含多個數據條目相同的值,在這種情況下,索引仍然非常有用,因爲它可以快速遍歷條目,即使某些條目具有重複值。

我希望我已經幫助澄清了至少一點,如果我誤解了任何部分,請糾正我。

相關問題