1. 程式人生 > >hash索引跟B樹索引的區別

hash索引跟B樹索引的區別

   Hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引。 
      可能很多人又有疑問了,既然 Hash 索引的效率要比 B-Tree 高很多,為什麼大家不都用 Hash 索引而還要使用 B-Tree 索引呢?任何事物都是有兩面性的,Hash 索引也一樣,雖然 Hash 索引效率高,但是 Hash 索引本身由於其特殊性也帶來了很多限制和弊端,主要有以下這些。

(1)Hash 索引僅僅能滿足"=","IN"和"<=>"查詢,不能使用範圍查詢。 
     由於 Hash 索引比較的是進行 Hash 運算之後的 Hash 值,所以它只能用於等值的過濾,不能用於基於範圍的過濾,因為經過相應的 Hash 演算法處理之後的 Hash 值的大小關係,並不能保證和Hash運算前完全一樣。

(2)Hash 索引無法被用來避免資料的排序操作。 
     由於 Hash 索引中存放的是經過 Hash 計算之後的 Hash 值,而且Hash值的大小關係並不一定和 Hash 運算前的鍵值完全一樣,所以資料庫無法利用索引的資料來避免任何排序運算;

(3)Hash 索引不能利用部分索引鍵查詢。 
     對於組合索引,Hash 索引在計算 Hash 值的時候是組合索引鍵合併後再一起計算 Hash 值,而不是單獨計算 Hash 值,所以通過組合索引的前面一個或幾個索引鍵進行查詢的時候,Hash 索引也無法被利用。

(4)Hash 索引在任何時候都不能避免表掃描。 
     前面已經知道,Hash 索引是將索引鍵通過 Hash 運算之後,將 Hash運算結果的 Hash 值和所對應的行指標資訊存放於一個 Hash 表中,由於不同索引鍵存在相同 Hash 值,所以即使取滿足某個 Hash 鍵值的資料的記錄條數,也無法從 Hash 索引中直接完成查詢,還是要通過訪問表中的實際資料進行相應的比較,並得到相應的結果。

(5)Hash 索引遇到大量Hash值相等的情況後效能並不一定就會比B-Tree索引高。 
     對於選擇性比較低的索引鍵,如果建立 Hash 索引,那麼將會存在大量記錄指標資訊存於同一個 Hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料的訪問,而造成整體效能低下。

相關推薦

hash索引B索引區別

   Hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引。        可能很多人又有疑問了,既然 Has

雜湊索引B+索引區別

邏輯區別 hash演算法立刻定位 對應的hash筒的關鍵字 b+數可能會做3次IO 最大4次IO 最小的話直接記憶體取出結果 hash: 1.只能等值查詢不能排序 2.hash碰撞 3.不支援範圍排序 4.hash筒大了維護成本更大 大資料的情況下b+索引比hash索

MySQL B+索引和哈希索引區別(轉 JD二面)

不同的應用 not null 效率比較 xxx apt link int data- 創建 導讀 在MySQL裏常用的索引數據結構有B+樹索引和哈希索引兩種,我們來看下這兩種索引數據結構的區別及其不同的應用建議。 二者區別 備註:先說下,在MySQL文檔裏,實際上是把B

MySQL B+索引和哈希索引區別

掃描 pad 不同的 tab ble 這不 只需要 網絡 adapt 導讀 在MySQL裏常用的索引數據結構有B+樹索引和哈希索引兩種,我們來看下這兩種索引數據結構的區別及其不同的應用建議。 二者區別 備註:先說下,在MySQL文檔裏,實際上是把B+樹索引寫成了BTRE

資料庫索引以及索引的實現(B+介紹,和B區別

索引 索引是提高資料庫表訪問速度的方法。 分為聚集索引和非聚集索引。 聚集索引:對正文內容按照一定規則排序的目錄。 非聚集索引:目錄按照一定的順序排列,正文按照另一種順序排列,目錄與正文之間保持一種對映關係。 把資料庫索引比作字典查詢索引, 聚集索引

資料庫B索引hash索引的優缺點比較

雜湊值衝突多時,不適用   雜湊索引的是用欄位的值,計算出一個範圍內的hash值,通過hash值去對映得到資料的位置(行號還是實際資料的位置,還沒有區分)已經指向下一個資料的指標,不會儲存欄位的值,所以使用hash索引不能直接得到資料,只能得到一個位置資訊;hash函式計算hash值和對映的一些演算法,導致

Mysql InnoDB B+索引和雜湊索引區別? MongoDB 為什麼使用B-?

B-樹和B+樹最重要的一個區別就是B+樹只有葉節點存放資料,其餘節點用來索引,而B-樹是每個索引節點都會有Data域。 B+樹 B+樹是為磁碟及其他儲存輔助裝置而設計一種平衡查詢樹(不是二叉樹)。B+樹中,所有記錄的節點按大小順序存放在同一層的葉節點中,各葉

MySQL B+索引和雜湊索引區別

導讀 在MySQL裡常用的索引資料結構有B+樹索引和雜湊索引兩種,我們來看下這兩種索引資料結構的區別及其不同的應用建議。 二者區別 備註:先說下,在MySQL文件裡,實際上是把B+樹索引寫成了BTREE,例如像下面這樣的寫法: CREATE TABLE t( a

MySQL索引 B+索引和雜湊索引區別

備註:先說下,在MySQL文件裡,實際上是把B+樹索引寫成了BTREE,例如像下面這樣的寫法: CREATE TABLE t( aid int unsigned not null auto_increment, userid int unsigned no

Hash索引B-Tree索引 介紹及區別

分享一篇 mongodb 索引的文章:   http://blog.nosqlfan.com/html/758.html .  mongo db 的索引也是採用B-Tree 索引.  下文附帶一下 B-Tree 和 Hash 索引的詳細比較: [原文地址]:   http

索引(B*索引/位圖索引)

功能 實施 ins 情況 不同 如果 使用 大表 pda 索引功能: 1.強制實施主鍵約束和唯一約束 2.提高性能 (1)大表,用索引比較快,小表,全表掃描,比較快。 (2)排序,如果select語句包括order by、group by、union或其它一些關鍵字,則

淺談MySQL的B索引索引優化

成本 情況 但是 數據行 eat bst tree bfs 優化 前言 MySQL的MyISAM、InnoDB引擎默認均使用B+樹索引(查詢時都顯示為“BTREE”),本文討論兩個問題: 為什麽MySQL等主流數據庫選擇B+樹的索引結構? 如何基於索引結構,理解常見的MyS

MySQL技術內幕 InnoDB儲存引擎:B+索引的使用

1、聯合索引 MySQL允許對錶上的多個列進行索引,聯合索引的建立方法與單個索引建立的方法一樣,不同之處僅在於有多個索引列。 CREATE TABLE t( a INT, b INT, PRIMARY KEY(a), KEY idx_a_b(a, b) )ENGINE=InnoD

MySQL技術內幕 InnoDB儲存引擎:B+索引

B+ 樹索引並不能找到一個給定鍵值的具體行。 B+ 樹索引能找到的只是被查詢資料所在的頁。 然後資料庫通過把頁讀入到記憶體, 再在記憶體中進行查詢, 最後得到要查詢的資料。 平衡二叉樹 平衡二叉樹的定義如下:首先符合二叉查詢樹的定義,其次必須滿足任何節點的兩個字數的

從MySQL Bug#67718淺談B+索引的分裂優化(轉)

原文連結:http://hedengcheng.com/?p=525   問題背景 今天,看到Twitter的DBA團隊釋出了其最新的MySQL分支:Changes in Twitter MySQL 5.5.28.t9,此分支最重要的一個改進,就是修復了MySQL 的Bug #67718:In

深入理解mysql資料庫B+索引

索引的作用: 首先索引通俗來講就像書的目錄,通過索引可以快速查詢對應資料,但這僅僅是表面上的,索引主要作用有3點,這僅僅算作其中1點。以下是鄙人的理解: 通過索引可以減少資料的掃描量(例如上面提到的將全書掃描,變成了根據目錄找) 索引可以把對硬碟的隨機IO變為順序IO()

深入理解資料庫索引採用BB+的原因

         前面幾篇關於資料庫底層磁碟檔案讀取,資料庫索引實現細節進行了深入的研究,但是沒有串聯起來的講解為什麼資料庫索引會採用B樹和B+樹而不是其他的資料結構,例如平衡二叉樹、連結串列等,因此,本文打算從資料庫檔案儲存以及讀取說起,講解資料庫索引的由來。      

B+ && B+索引&&Cardinality值 ----- InnoDB儲存引擎內幕

1.二叉查詢樹&平衡二叉樹 B+樹由二叉查詢樹+平衡二叉樹演化而來 1.1下面來簡單介紹一下二叉查詢樹 例子: 上圖中:數字代表每個節點的鍵值 特點: 1.左子樹的鍵值總是<右子樹的鍵值 2.右子樹的鍵值總是>左子樹的鍵值 若

結合innodb的B+索引來優化sql查詢一例

先上表結構: CREATE TABLE `quote_xxxxx` ( `instrument_id` varchar(20) NOT NULL, `time_type` varchar(20)

【MySQL技術內幕】30-B+索引的使用

1、不同應用中B+樹索引的使用 在瞭解了B+樹索引的本質和實現後,下一個需要考慮的問題是怎樣正確地使用B+樹索引,這不是一個簡單的問題。這裡所總結的可能並不適用於所有的應用場合。我所能做的只是概括一個大概的方向。在實際的生產環境使用中,每個DBA和開發人員,還是需要根據自己