1. 两种数据结构:

hash:

优点:
  • 键值唯一,哈希索引明显有绝对优势
  • hash索引的检索效率高于btree,因为它是一次到位,不像btree要从根节点到枝节点,再到页节点多次的IO访问。

缺点:

  • 仅仅能满足 "=","IN"和"<=>",它不能使用范围查询。
    因为他是通过比较hash值,原先是有序的键值,经过hash有可能变得不连续了,so只能用于等值过滤。
  • 无法进行数据的排序操作,以及 like ‘xxx%’这样的模糊查询(不支持模糊查询,本质上还是范围查询)
  • 不能利用部分索引查询
    因为它是计算组合索引合并后的hash值,而不是单独计算。对于一个或者多个的组合索引进行查询的时候,hash索引无法被利用。(不支持多个字段查询)
  • 在遇到大量的重复键,就是hash值相等的情况下,性能不一定比btree高。因为存在hash碰撞。

适用场景:
精确的值查询,效率高
例如:
SELECT … FROM t WHERE C1 = ?; 仅等值查询
大多数情况下,都会有范围查询,模糊查询这些,用btree索引就行。

B+Tree:

Q.E.D.


如人饮水、冷暖自知