MySQL的索引类型
在MySQL数据库中,为了提高数据库查询效率,通常都要对某些列建立相应的索引
1.什么是索引?
- 索引是一种对数据库表中的一列或多列进行排序的数据结构
2.为什么要使用索引?
如果不建立索引,那么在进行查询时就只能一个一个的去匹配,通常都要进行全文搜索,查询效率非常慢;通过对一个列或多个列建立索引,由于索引是有序的,那么在查找时就可以调用一些高级的查找算法(如二分查找)来大大提高查询效率,但同时建立和更新索引也会耗费时间和空间.
3.MySQL创建索引的类型
首先索引是由存储引擎来实现,不用的存储引擎支持不同的索引类型:
- 普通的索引
- 唯一索引,索引的列的值必须唯一,可以防止往数据库中插入重复的数据
- 多列索引,由多个列组成一个索引,适用于组合搜索
- 主键索引,索引的列值唯一且不为空,表中只能有一个主键索引
- 全文索引,用来查找文本中的关键词,通过关键词映射到所在文档
4.MySQL中的b+Tree索引
B+Tree索引是大多数存储引擎的默认索引类型
B+Tree索引特点:
- B+Tree是基于B-Tree的一种优化的多路平衡查找树
- B+Tree树中的所有非叶子节点不存储数据,只有叶子节点才存储相应的数据,这样每个非叶节点可以存储更多的索引值,减少树的查询复杂度
- B+Tree中的每个叶子节点通过指针相连,可以实现快速的范围查询
- B+Tree中的节点的值是从左到右依次递增的
5.聚集索引和非聚集索引
非聚集索引: B+Tree中的叶子节点存的是指针,指向数据库表中的数据,索引文件和数据文件是分开来存储的
聚集索引: 叶子节点中存储的是数据记录,索引和数据记录是存放在一起的,聚集索引的查询效率更高
需要注意的是: 在MylSAM存储引擎中索引和数据是分离的,所以它使用的是非聚集索引;而InnoDB存储引擎中数据文件就是索引文件,所以是聚集索引.
6.InnoDB和MylSAM的区别
MySQL默认使用的是InnoDB存储引擎:
主要的区别:
- InnoDB支持事务机制,而MylSAM不支持
- InnoDB支持行锁和表锁,MylSAM只支持表锁
- InnoDB支持主键,MylSAM不支持主键
- InnoDB不支持全文索引,MylSAM支持全文索引
[参考资料]: