索引概述
介绍 索引(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 |
上述索引在不同引擎的支持情况如下
索引 | InnoDB | MyISAM | MyISAM |
---|---|---|---|
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | 不支持 | 不支持 | 支持 |
R-tree索引 | 不支持 | 支持 | 不支持 |
Full-text | 5.6版本之后支持 | 支持 | 不支持 |
如果不指定使用哪种索引,默认就是B+tree索引。也就是我们平常所说的索引,如果没有特别指明,都是B+树结构组织的索引