2013-03-10 21 views
0

我在使用BTREE索引或HASH索引之間進行辯論。推理散列索引優勢/他們應該何時應用於BTREE索引?

從理論上講,使用HASH索引有什麼好處?
什麼時候應該選擇它們,更重要的是爲什麼?

我已經讀過,散列索引對點查詢很好,但是爲什麼?

我已經知道BTREE索引最適合範圍查詢,因爲您可以通過從左到右輕鬆遍歷葉節點。

回答

0

你沒有提到特定的DBMS,所以這個答案很通用。

一個正確執行的散列索引應該在單個提取中達到點查詢的答案。 B樹將使用類似lg_B(n)的輔助存儲訪問,其中B是近似分支因子,n是條目數。緩存和合理的節點大小可能會將其保持爲幾次提取,但仍然是散列索引的兩倍。另外,爲了遍歷每個節點中的子索引(如每個節點的lg_2(B)數據比較操作),每個B樹訪問都有與其相關的非平凡計算。哈希索引的計算時間通常非常有限(哈希計算和少量數據比較操作 - 希望是一個)。在基於B樹的索引中,在每個節點內搜索的計算時間通常是重要的。

在採摘方面,使用哈希索引如果

  • 你只希望點查詢
  • 你不希望在數據落入任何表現不佳的情況下,爲系統的散列函數(古怪的情況下,但我想我應該提到它)

如果您有任何種類的範圍查詢和/或想要預定義的列的排序結果,B-Tree系列更好。