1 mysql索引分為 btree索引和哈希索引
1.1 使用場景
- btree索引能適用於大部分需要索引的場景,
- hash索引僅能在精確查詢時有明顯優勢,在MySQL中,只有HEAP/MEMORY引擎表才能顯式支持哈希索引
1.2 btree索引
1.2.1 描述
B-Tree索引以B+Tree(樹)的結構存儲數據,B-Tree索引能夠加快數據的查詢速度,B-Tree更適合進行范圍查找
1.2.2 優勢
- 全值匹配的查詢;如:order_sn=’987654321’;
- 匹配最左前綴的查詢;
- 匹配列前綴查詢 ;
- 匹配范圍值得查詢;
- 精確匹配左前列並范圍匹配另外一列;
- 只訪問索引的查詢;
- B+樹索引的關鍵字檢索效率比較平均,不像B樹那樣波動幅度大,
1.3 hash索引
1.3.1 描述
哈希索引就是采用一定的哈希算法,
把鍵值換算成新的哈希值,檢索時不需要類似B+樹那樣從根節點到葉子節點逐級查找,
只需一次哈希算法即可立刻定位到相應的位置,速度非常快。
1.3.2 優勢
精確查詢索引字段對應的值,速度比btree樹快
1.3.3 局限
如果是等值查詢,那么哈希索引明顯有絕對優勢,因為只需要經過一次算法即可找到相應的鍵值;
如果是范圍查詢檢索,這時候哈希索引就毫無用武之地了,
因為原先是有序的鍵值,經過哈希算法后,有可能變成不連續的了,就沒辦法再利用索引完成范圍查詢檢索;
哈希索引也沒辦法利用索引完成排序,以及
like ‘xxx%’ 這樣的部分模糊查詢(這種部分模糊查詢,其實本質上也是范圍查詢);
哈希索引也不支持多列聯合索引的最左匹配規則;
在有大量重復鍵值情況下,哈希索引的效率也是極低的,因為存在所謂的哈希碰撞問題。