多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[链接1111111111](https://blog.csdn.net/qq_32483145/article/details/80191323) # B+Tree索引和Hash索引的区别 * Hash索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位; * B+树索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问 ## Hash索引 ![](https://img.kancloud.cn/c9/6b/c96b6b00d29423e2502b6cc23beddf54_633x174.png) ##### 哈希索引优点   ①.快速查询:参与索引的字段只要进行Hash运算之后就可以快速定位到该记录,时间复杂度约为1 ##### 哈希索引缺点   ①.哈希索引只包含哈希值和行指针,所以不能用索引中的值来避免读取行   ②.哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序和范围查询   ③.哈希索引也不支持部分索引列查询,因为哈希索引始终是使用索引列的全部数据进行哈希计算的。   ④.哈希索引只支持等值比较查询,如=,IN(),<=>操作   ⑤.如果哈希冲突较多,一些索引的维护操作的代价也会更高 #### B+ Tree索引优点   ①.全值匹配:指的是和索引中所有列进行匹配。假设以(姓,名,出生日期)三个数据项建立复合索引,那么可以查找姓名为张三,出生日期在2000-12-12的人   ②.匹配最左前缀:假设以(姓,名,出生日期)三个数据项建立复合索引,可以查找所有姓张的人   ③.匹配列前缀:假设有姓为司徒,司马的人,我们也可以查找第一列的前缀部分,如查找所有以司开头的姓的人   ④.匹配范围值:可以查找所有在李和张之间的姓的人,注意范围查询只在复合索引的优先排序的第一列。(假设姓名按照拼音排序)   ⑤.精确匹配前面列并范围匹配后一列:可以查找姓李并出生日期在2000-12-12之后的人或姓名为张三并出生日期在2000-12-12之后的人,注意范围第一个范围查询后面的列无法再使用索引查询   ⑥.只访问索引的查询:即查询只需访问索引,而无需访问数据行。(此时应想到索引中的覆盖索引) #### B+ Tree索引缺点   ①.如果不是按照索引的最左列开始查找,则无法使用索引。如无法查找名为龙的人,也无法查找在2000-12-12之后出生的人,当然也无法查找姓中以龙结尾的人(注意为和含有的区别)   ②.不能跳过索引中的列:无法查找姓李并在2000-12-12之后出生的人   ③.如果查询中包括某个列的范围查询,则其右边所有列都无法使用索引优化查询 ![](https://img.kancloud.cn/5f/d2/5fd25e0495561056983527034e41fd01_814x661.png)