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

索引mysql

  索引是爲了方便查找咱們所須要的數據。sql

 mysql支持的索引數據類型優化

B-Tree索引的特色spa

B-Tree索引以B+Tree(樹)的結構存儲數據。排序

B-Tree索引可以加快數據的查詢速度;索引

B-Tree更適合進行範圍查找;class

在什麼狀況下能夠用到B樹索引數據類型

全值匹配的查詢如:order_sn=’987654321’數據

匹配最左前綴的查詢查詢

匹配列前綴查詢 

匹配範圍值得查詢

精確匹配左前列並範圍匹配另一列

只訪問索引的查詢

BTree索引的使用限制

若是不是按照索引的最左列開始查找,則沒法使用索引。

使用索引時不能跳過索引中的列

Not in 和<>操做沒法使用索引

若是查詢中有某個列的範圍查詢,則其右邊全部的列都沒法使用索引

 

Hash索引的特色

Hash索引時基於Hash表實現的,只有查詢條件精確匹配Hash索引中的全部列時,纔可以使用到Hash索引。

對於Hash索引中的全部列,存儲引擎都會爲每一行計算一個Hash碼,Hash索引中存儲的就是Hash碼。

Hash索引的限制

Hash索引必須進行二次查找

Hash索引沒法用於排序

Hash索引不支持部分索引查找也不支持範圍查找

Hash索引中Hash碼的計算可能存在Hash衝突

爲何要使用索引

索引大大減小了存儲引擎須要掃描的數據量

索引能夠幫助咱們進行排序避免使用臨時表

索引能夠把隨機I/O變爲順序I/O

索引是否是越多越好

索引會增長寫操做成本

太多的索引會增長查詢優化器的選擇時間

相關文章
相關標籤/搜索