1. 程式人生 > >B-Tree 索引和 Hash 索引的對比

B-Tree 索引和 Hash 索引的對比

對於 B-tree 和 hash 資料結構的理解能夠有助於預測不同儲存引擎下使用不同索引的查詢效能的差異,尤其是那些允許你選擇 B-tree 或者 hash 索引的記憶體儲存引擎。

B-Tree 索引的特點

B-tree 索引可以用於使用 =, >, >=, <, <= 或者 BETWEEN 運算子的列比較。如果 LIKE 的引數是一個沒有以萬用字元起始的常量字串的話也可以使用這種索引。比如,以下 SELECT 語句就使用索引:
SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';
SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

在第一個句子中,只會考慮 'Patrick' <= key_col < 'Patricl' 的記錄。第二句中,則只會考慮 'Pat' <= key_col < 'Pau' 的記錄。
以下 SELECT 語句不使用索引:
SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';
SELECT * FROM tbl_name WHERE key_col LIKE other_col;

第一句裡面,LIKE 的值起始於一個萬用字元。在第二句裡,LIKE 的值不是一個常量。
如果你這樣使用: ... LIKE '%string%',其中的 string 不大於三個字元,MySql 將使用 Turbo Boyer-Moore 演算法來對該字串表示式進行初始化,並使用這種表示式來讓查詢更加迅速。
如果 col_name 列建立了索引,那麼一個使用了 col_name IS NULL 的查詢是可以使用該索引的。
任何沒有涵蓋 WHERE 從句中所有 AND 級別的條件的索引將不會被使用。換句話講,要想使用索引,該索引的前導列必須在每一個 AND 組合中使用到。
以下 WHERE 從句使用索引:
... WHERE index_part1=1 AND index_part2=2 AND other_column=3


    /* index = 1 OR index = 2 */
... WHERE index=1 OR A=10 AND index=2


    /* optimized like "index_part1='hello'" */
... WHERE index_part1='hello' AND index_part3=5


    /* Can use index on index1 but not on index2 or index3 */
... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;

這些 WHERE 從句不使用索引:
    /* index_part1 is not used */
... WHERE index_part2=1 AND index_part3=2


    /*  Index is not used in both parts of the WHERE clause  */
... WHERE index=1 OR A=10


    /* No index spans all rows  */
... WHERE index_part1=1 OR index_part2=10

有時,即使有索引可以使用,MySql 也不使用任何索引。發生這種情況的場景之一就是優化器估算出使用該索引將要求 MySql 去訪問這張表的絕大部分記錄。這種情況下,一個表掃描可能更快,因為它要求更少量的查詢。但是,如果這樣的一個查詢使用了 LIMIT 來檢索只是少量的記錄時,MySql 還是會使用索引,因為它能夠更快地找到這點記錄並將其返回。

Hash 索引的特點

Hash 索引有著與剛才所討論特點的相比截然不同的特點:
  • Hash 索引只能夠用於使用 = 或者 <=> 運算子的相等比較(但是速度更快)。Hash 索引不能夠用於諸如 < 等用於查詢一個範圍值的比較運算子。依賴於這種單值查詢的系統被稱為 "鍵-值儲存";對於這種系統,儘可能地使用 hash 索引。
  • 優化器不能夠使用 hash 索引來加速 ORDER BY 操作。這種型別的索引不能夠用於按照順序查詢下一個條目。
  • MySql 無法使用 hash 索引估計兩個值之間有多少行(這種情況由範圍優化器來決定使用哪個索引)。如果你將一張 MyISAM 或 InnoDB 錶轉換成一個 hash 索引的記憶體表時,一些查詢可能會受此影響。
  • 查詢某行記錄必須進行全鍵匹配。而 B-tree 索引,任何該鍵的左字首都可用以查詢記錄。
原文連結:http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html

相關推薦

B-Tree 索引 Hash 索引對比

對於 B-tree 和 hash 資料結構的理解能夠有助於預測不同儲存引擎下使用不同索引的查詢效能的差異,尤其是那些允許你選擇 B-tree 或者 hash 索引的記憶體儲存引擎。B-Tree 索引的特點B-tree 索引可以用於使用 =, >, >=, <

B-Tree 索引 Hash 索引的對照

blank tree 內存 算法 data 影響 類型 特點 column 對於 B-tree 和 hash 數據結構的理解可以有助於預測不同存儲引擎下使用不同索引的查詢性能的差異。尤其是那些同意你選擇 B-tree 或者 hash 索引的內存存儲引擎。B-Tree 索

B-Tree索引 hash索引區別

1:索引型別   1.1 B-tree索引   注: 名叫btree索引,大的方面看,都用的平衡樹,但具體的實現上, 各引擎稍有不同, 比如,嚴格的說,NDB引擎,使用的是T-tree   Myisam,innodb中,預設用B-tree索引 &nb

索引B+索引hash索引,各自的區別

單獨 效率 結構 edi 性能 mil b+樹 ash 避免 Hash索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B+樹索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,那為什麽大家不都用Hash索引而還要使用B+樹索引呢? 1. Has

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

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

MySQL的btree索引hash索引的區別

class 操作 麻煩 關系 進行 特殊性 檢索 www. 創建 MySQL的btree索引和hash索引的區別 ash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO

BTREE索引HASH索引,聚集索引非聚集索引

https://www.jianshu.com/p/76530afa13cb https://blog.csdn.net/yifanSJ/article/details/79220044 BTREE索引和HASH索引 1、不同引擎的預設索引 不同的引擎對於索引有不同的支援:Innod

MySQL的BTREE索引HASH索引

為什麼要用索引? 使用索引後減少了儲存引擎需要掃描的資料量,加快查詢速度 索引可以把隨機I/O變為順序I/O 索引可以幫助我們對所搜結果進行排序以避免使用磁碟臨時表 Mysql支援的索引型別:B-

數據庫索引(BTree索引Hash索引

就是 strong 存儲引擎 sql 基於 條件 mysql b+ tree 索引   索引是為了方便查找我們所需要的數據。 mysql支持的索引數據類型 B-Tree索引的特點 B-Tree索引以B+Tree(樹)的結構存儲數據。 B-Tree索引能夠加快

BTreeB+TreeHash索引詳解

b-tree 關系 查詢優化 刪除節點 eight node 常用 技術分享 遍歷 二叉查找樹 二叉樹具有以下性質:左子樹的鍵值小於根的鍵值,右子樹的鍵值大於根的鍵值。 如下圖所示就是一棵二叉查找樹, 對該二叉樹的節點進行查找發現深度為1的節點的查找次數為1,深度為2的查

【轉】Mysql學習-索引總結(B-treehash、主鍵索引、唯一索引、普通索引、全文索引組合索引)

常用的兩種索引結構:B-tree和HASH B-tree   B-tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要經行全表掃描來獲取需要的資料,取而代之的是從根節點開始搜尋。根節點的槽中存放了指向子節點的指標,儲存引擎根據這些指標向下查詢。通常比較節點頁的值和要查詢的值可以找

MySQL支援的索引型別(B-Tree索引hash索引

  索引,是儲存引擎用於快速找到記錄的一種資料結構。尤其是在表中的資料量越來越大時,索引對於效能的提升非常關鍵。今天先聊一聊MySQL支援的兩種主要的索引型別。      在MySQL中,儲存引擎在使用索引時,會先在索引中找到對應值,然後根據所匹配的

為什麼說B+-treeB 樹更適合實際應用中作業系統的檔案索引資料庫索引

B樹: B+樹 1) B+-tree的磁碟讀寫代價更低 B+-tree的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對B 樹更小。如果把所有同一內部結點的關鍵字存放在同

B-樹Hash索引區別

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

(ainusers原創)Hash索引BTree索引

注: Innodb和myisam預設的索引是Btree索引 Hash索引(類比於拼音查詢漢字)   BTree(類比於偏旁查詢漢字) 區別(瞭解Innodb和myisam主要還應該從區別開始) 1.主要區別在於:Hash不能用於範圍查詢 2.檢索效率遠高於BTree

mysql索引型別Normal,Unique,Full Text區別以及索引方法btree索引hash的區別

一.mysql索引型別Normal,Unique,Full Text區別 (1)Normal: 表示普通索引,大多數情況下都可以使用 (2)Unique: 約束唯一標識資料庫表中的每一條記錄,即在單表中不能用每條記錄是唯一的(例如身份證就是唯一的),Unique(要求列唯一)和Primary K

資料庫常見索引解析(B樹,B-樹,B+樹,B*樹,點陣圖索引Hash索引

B樹        即二叉搜尋樹:        1.所有非葉子結點至多擁有兩個兒子(Left和Right);        2.所有結點儲存一個關鍵字;        3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹;        如:  

詳解B+tree以及mysql的索引原理 一

最近在學mysq的索引,網上查了很多資料但都沒有很好理解的,現在先講講b+tree 動態查詢樹主要有:二叉查詢樹(Binary Search Tree),平衡二叉查詢樹(Balanced Binary Search Tree),紅黑樹 (Red-Black Tree )

mysql的hash索引btree索引

mysql的hash索引和btree索引 hash 索引有著與剛才所討論特點的相比截然不同的特點: Hash 索引只能夠用於使用 = 或者 <=> 運算子的相等比較(但是速度更快)。Hash 索引不能夠用於諸如 < 等用於查詢一個範圍值的比較運算子。依賴於這種單值查詢

MySQL索引的原理,B+樹、聚集索引二級索引的結構分析

  索引是一種用於快速查詢行的資料結構,就像一本書的目錄就是一個索引,如果想在一本書中找到某個主題,一般會先找到對應頁碼。在mysql中,儲存引擎用類似的方法使用索引,先在索引中找到對應值,然後根據匹配的索引記錄找到對應的行。   我們首先了解一下索引的幾種型別和索引的結構。 索引型別 B樹   大多