2012-11-20 91 views
20

我研究了數據庫管理系統(可擴展,線性)和關於數據庫中的索引(稀疏,密集,索引基於二級密鑰等)的哈希,但我無法理解哈希和索引之間的區別。這兩種技術是一起使用還是隻是使用?我很困惑,因爲這兩種技術的目的似乎是爲了使我們能夠快速檢索數據,所以我認爲兩者都應該足夠。散列和索引有什麼區別?

任何人都可以弄清楚區別?

+4

哈希是一種索引方法(或一種_access方法_);樹木(B型樹等)是另一種。 –

回答

12

什麼是索引?

索引是一種對多個字段上的多個記錄進行排序的方法。在表中的字段上創建索引會創建另一個數據結構,該結構保存字段值以及指向與其相關的記錄的指針。然後對索引結構進行排序,從而對其執行二進制搜索。

什麼是散列?

散列是將字符串轉換爲通常較短的固定長度值或表示原始字符串的鍵的轉換。散列用於索引和檢索數據庫中的項目,因爲使用較短的散列鍵查找項目比使用原始值查找項目要快。

我認爲這可能會清除您的疑問。

+0

如果您添加了新記錄,則對索引結構進行排序將變得非常昂貴。您還可以提到,可以使用B +樹來組織數據,以便快速訪問索引鍵。 – adijo

10

散列是一種索引:它可以用來定位基於鍵的記錄 - 但它不保留任何記錄的順序。基於散列,不能迭代到後續元素或前一元素。然而,這是什麼索引(在數據庫的上下文中)。

2
  • 散列不保證不同的值會散列到不同的地址。
  • 碰撞在哈希中。
  • 散列導致溢出。
  • 無需訪問索引結構來查找數據&然後從DB文件讀取數據。
  • 有命令來定義索引但不是哈希。
+4

我認爲散列和索引之間最大的區別在於你的回答和其他許多人錯過的是*大多數索引方案適用於排序或找到「近」匹配,而散列除了找到「確切」火柴。 – supercat

0

散列是高級搜索技術。大數據被製成小數據項並存儲在表中。但索引和二進制搜索以線性方式進行搜索。 並且索引用於製作索引(鍵)到多個字段的組合

相關問題