索引概述

 

介绍 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护这满足特定查找算法的数据结构, 这些数据结构以某种方式(引用)数据,这样就可以在这些数据结构实现高级查找语法,这些数据结构就是索引

 

执行一条查询语句

1、当表没有设置索引时,该查询就会进行全表扫描,找出符合条件的数据

2、当表设置了索引时,可通过算法只需要匹配较少次数就直接定位到数据在表中的位置

 

索引优点

1、提高数据检索的效率,降低数据库的IO成本(只要是操作磁盘就涉及磁盘IO)

2、通过索引列对数据进行排序,降低数据排序成本,降低CPU的消耗

 

索引缺点

1、索引列也是要占用磁盘空间的,如myi、ibd后缀的文件就是存储索引

2、所以大大提高了查询效率,同时却也降低更新表的速度,如对表进行增insert、改update、删delete时,效率降低

 

索引结构 索引在MySQL体系结构的第三层(存储引擎层)实现的,不同的存储引擎有不同的结构,索引结构如下

索引结构描述
B+Tree索引最常见的引擎类型,大部分引擎都支持B+树索引,例如InnoDB、Memery、MyISAM引擎
Hash索引底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才会查询,性能高但是不支持范围查询
R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理位置相关数据的时候,通常使用较少
Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES

 

上述索引在不同引擎的支持情况如下

索引InnoDBMyISAMMyISAM
B+tree索引支持支持支持
Hash索引不支持不支持支持
R-tree索引不支持支持不支持
Full-text5.6版本之后支持支持不支持

 

如果不指定使用哪种索引,默认就是B+tree索引。也就是我们平常所说的索引,如果没有特别指明,都是B+树结构组织的索引