什么是索引
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
以上是维基百科对数据库索引的解释,那我们很好理解,数据库索引就是一种方便查询的数据结构。
索引类型
- 普通索引(key):对关键字没有限制。
- 唯一索引(unique key):要求记录提供的关键字不能重复。
- 主键索引(primary key):要求关键字唯一且不为null。
使用场景
- where :可以尝试在一个字段未建立索引时,根据该字段查询的效率,然后对该字段建立索引(alter table tableName add index(columnName)),同样的SQL执行的效率会有很大提升(数据量越大越明显)。
- order by:当使用order by将查询结果按照某个字段排序时,如果该字段没有建立索引,那么执行计划会将查询出的所有数据使用外部排序(将数据从硬盘分批读取到内存使用内部排序,最后合并排序结果),这个操作是很影响性能的,因为需要将查询涉及到的所有数据从磁盘中读到内存(如果单条数据过大或者数据量过多都会降低效率)。但是当对相应字段建立索引之后,由于索引本身是有序的,因此直接按照索引的顺序和映射关系逐条取出数据即可。而且如果分页的,那么只用取出索引表某个范围内的索引对应的数据,而不用像前面那样取出所有数据进行排序再返回某个范围内的数据。
- 注意要点:
- 索引字段需独立出现;
- like查询时,不能以通配符开头。
- 复合索引只对第一个字段有效。
如何建立,优化索引
- 建立比较基础的索引,例如 where ,order by 后的字段建立索引。
- 基于业务驱动,某一条件经常出现,则可以将多字段索引变为复合索引。
- 将不常用的索引删除掉。
索引的存储结构
看了很多文章,觉得这篇文章讲的很好。MySQL索引背后的数据结构及算法原理