[转]MySQL索引方法 MySQL索引方法

 

此为转载文章,仅作记录使用,方便往后查看,原文连接:https://www.cnblogs.com/luyucheng/p/6289048.htmlhtml

 

MySQL索引方法

 

MySQL目前主要有如下几种索引方法:B-Tree,Hash,R-Tree。算法

1、B-Tree

B-Tree是最多见的索引类型,全部值(被索引的列)都是排过序的,每一个叶节点到跟节点距离相等。因此B-Tree适合用来查找某一范围内的数据,并且能够直接支持数据排序(ORDER BY)
B-Tree在MyISAM里的形式和Innodb稍有不一样:
MyISAM表数据文件和索引文件是分离的,索引文件仅保存数据记录的磁盘地址
InnoDB表数据文件自己就是主索引,叶节点data域保存了完整的数据记录数据库

2、Hash索引

1.仅支持"=","IN"和"<=>"精确查询,不能使用范围查询:
因为Hash索引比较的是进行Hash运算以后的Hash值,因此它只能用于等值的过滤,不能用于基于范围的过滤,由于通过相应的Hash算法处理以后的Hash
2.不支持排序:
因为Hash索引中存放的是通过Hash计算以后的Hash值,并且Hash值的大小关系并不必定和Hash运算前的键值彻底同样,因此数据库没法利用索引的数据来避免任何排序运算
3.在任什么时候候都不能避免表扫描:
因为Hash索引比较的是进行Hash运算以后的Hash值,因此即便取知足某个Hash键值的数据的记录条数,也没法从Hash索引中直接完成查询,仍是要经过访问表中的实际数据进行相应的比较,并获得相应的结果
4.检索效率高,索引的检索能够一次定位,不像B-Tree索引须要从根节点到枝节点,最后才能访问到页节点这样屡次的IO访问,因此Hash索引的查询效率要远高于B-Tree索引
5.只有Memory引擎支持显式的Hash索引,可是它的Hash是nonunique的,冲突太多时也会影响查找性能。Memory引擎默认的索引类型便是Hash索引,虽然它也支持B-Tree索引post

3、R-Tree索引

R-Tree在MySQL不多使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。性能

查看更多:
MySQL优化
MySQL各存储引擎
MySQL锁详解
MySQL事务
MySQL索引类型优化

相关文章
相关标签/搜索