使用索引是提高数据库查询效率的主要方式,下面从索引结构,索引类型,创建索引,命中索引几个方面来介绍索引。
mysql5.5以上的默认存储引擎innodb,只显式支持BTree( 事实上从数据结构上来讲是B+树,mysql称之为BTree)索引,对于频繁访问的表,innodb会建立自适应hash索引,
即在B树索引基础上建立hash索引,可以显著提高查找效率,用户是无法自己指定的,除此之外还有Hash索引和全文索引(fullText索引)。
BTree索引
BTree,顾名思义,就是所有的索引节点都按照balance tree的数据结构来存储。BTree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。
Btree中,每个结点包含:
1、本结点所含关键字的个数;
2、指向父结点的指针;
3、关键字;
4、指向子结点的指针;
更详细的B+树介绍参考https://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html
Hash索引
Hash 索引由于使用了hash表结构,其检索效率很高,索引的检索可以一次定位,不像B+树索引需要从根节点到枝节点,
所以 Hash 索引的查询效率要远高于 B+树 索引。但是,Hash索引的使用范围非常有限。
1.在MySQL中,只有HEAP/MEMORY引擎表才能支持哈希索引,InnoDB引擎的自适应哈希索引(adaptive hash index)不
能在创建索引时指定。
2.Hash索引仅支持=,>=,<=这几种条件运算,不支持排序,范围内查找,like等查询。
3.Hash索引不支持组合索引中部分索引的查找。
4.当Hash值重复较多时,索引速度可能不如BTree索引。
FullText索引
Full-text索引就是我们常说的全文索引,他的存储结构也是Btree。主要是为了解决在我们需要用like查询的低效问题。
只能解决’xxx%’的like查询。如:字段数据为ABCDE,索引建立为A、AB、ABC、ABCD、ABCDE五个。
建立索引:
create index 索引名 on 表名(索引字段名)
建立唯一索引(唯一索引要求字段中不会出现重复数据)
create unique index 索引名 on 表名(索引字段名)
未完待续
原文:https://www.cnblogs.com/coder-lichao/p/10940338.html