hash索引跟B+ tree索引区别
2019-07-24 本文已影响0人
xueseyounai
1.范围区别:
1.hash索引因为底层是哈希表,数据存储在哈希表中顺序是没有关联的,所以他不适合范围查找,如果要范围查找就需要全表扫描,他只适合全值扫描;
简单的来说就是hash索引适合等值查找,不适合范围查找
2.B+ tree树索引,底层是多路查询平衡树,节点是天然有序的(左节点小于服节点,右节点大于父节点),所以对于范围查找的时候不需要做全表扫描;
2.排序
hash索引无法进行排序
3.哈希碰撞问题
如果存在重复键值对,哈希索引效率就会很低
补充说明:
B+ tree
1.存储对象
1.1 叶子节点,可以存储整行数据,被称为主键索引,也被称作为聚簇索引;
1.2 叶子节点,可以存储主键的值,被称为非主键索引,也被称作为聚簇索引
注意:
主键索引查询速度会比较快,因为主键只会查询一次,因为数据已经存储在节点数据中了
非主键索引会回表查询多次(回表,就是第一次索引查找查找到的是主键值,然后用主键值去查找主键的树);
但是有一种情况例外就是覆盖索引,覆盖索引就是当查询语句select 索引列值;就是查询的语句是正好是索引列的值,那么也可以只查询一次
索引最左匹配规则,在联合索引的时候,mysql明明创建了索引,但是却没有用索引,这跟查询优化器相关;