一 索引简介
1,概念:
MySQL官方对索引的定义是:索引(Index)是帮助MySQL高效获取数据的数据结构。索引最形象的比喻就是图书的目录。注意只有在大量数据中查询时索引才显得有意义。所以索引创建的好对于数据库的数据查询性能很重要。
2,优点:
- 大大减少了服务器需要扫描的数据量。
- 帮助服务器避免排序带来的性能开销。
- 将随机IO变成顺序IO
3,哪些情况需要建索引
- 主键,默认创建主键索引
- 经常用作查询条件的字段
- 经常需要排序,分组和统计的字段
- 查询主与其他表关联的字段
4,哪些情况不需要建索引
- 表记录太少,百万级别以下的数据不需要创建索引
- 经常增删改的表不需要创建索引
- 数据重复且分布均匀的不需要创建,eg:true|false
- 频繁更新的字段不适合创建索引
- where条件用不到的字段
5,不同维度分类
在MySQL中索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。常见的索引分类如下:
按数据结构分类:B+tree索引、Hash索引、Full-text索引。
按物理存储分类:聚集索引、非聚集索引(也叫二级索引、辅助索引)。
按字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)。
按字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)。
二 按照结构分类
MySQL索引按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。
注:InnoDB实际上也支持Hash索引,但是InnoDB中Hash索引属于是自适应Hash索引,它的创建过程由存储引擎引擎自动优化创建,不能人为干预是否为表创建Hash索引
1,B+tree索引
B+tree 索引是MySQL中被存储引擎采用最多的索引类型。它适用于全键值、键值范围和最左前缀查找。使用联合索引时,如果不是按照索引列的顺序进行查找,则无法使用索引。除了适用于查找,还可以用于排序和分组