数据库索引

阅读:442

1. 什么是索引

索引是用来排序数据,增加查询和排序操作的速度。比如一本书的目录,或者逛商场时,有导航图等。

试想下,比如查字典,前面如果没有查找的目录,那么查询一个字,该如何去查询呢?没错,你必须一页一行的去搜索,效率十分低下。有了目录就不同,可以很快定位到范围,查找到内容。

这里为总结下:

  • 索引增加了检索速度,但是数据插叙、修改和删除都需要维护,也增加了成本,包括维护和空间成本;
  • 并非所有的列都适合做索引,比如性别,就只有男或女,就不适合;

 

2. 索引的分类

我们以MySQL为例,我们一般分为聚簇索引和非聚簇索引索引。聚簇索引就是主键索引,索引和数据都在一起。反之,索引和数据不在一起,就是非聚簇索引,查询时,一般通过索引查找到主键(如果有的话),然后回表,也就是通过主键查询聚簇索引,找到数据,如果主键已经满足查询要求,则直接返回,无须回表。MySQL的InnoDB是用B+Tree实现的。

当然,除主键索引是聚簇索引外,其他的所有都是非聚簇索引,有如下几种:

  • 普通索引
  • 唯一索引
  • 组合索引
  • 全文索引

一般创建方式如下:

CREATE TABLE table_name[col_name data type]
[unique|fulltext][index|key][index_name](col_name[length])[asc|desc]
  • unique|fulltext为可选参数,分别表示唯一索引、全文索引
  • index和key为同义词,两者作用相同,用来指定创建索引
  • col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择
  • index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值
  • length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度
  • asc或desc指定排序,升序或降序的索引值存储

总结:

对于初学者,只需要知道索引是用来干什么的,会使用即可。但是,在大多数互联网公司的面试中,都会问到,索引的分类,存储原理,以及如果查询一条语句是如何运行的。这就要求,需要理解索引的实现原理,在后续的课程中会详细的介绍。


赞赏支持


精彩留言

发表评论