数据库索引

索引

接触过关系型数据库(MySQL、Oracle、SqlServer等)的人基本都会接触到索引,大多数情况下建立索引的目的都是可以查询速度,那索引究竟是什么、有什么用、该怎么用、原理是什么?

1. 索引是什么?

1.1 概念

索引 (数据库术语)(以下内容摘自百度百科)

        在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
        索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
        当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。

        基本每个人在学生时代都接触过汉语字典,我们在查某个字的时候多数情况会通过字典前几页的拼音索引/偏旁索引去查,可以更快的找到这个字,不必翻遍整个字典(全表扫描)。
        数据库索引也是这样一个概念(相较于字典,索引种类更加丰富),是一种有序且占用物理空间的数据结构,它维护了索引列值的集合和对应的数据页的物理地址,主要目的也是加快查询速度

1.2 索引类型

        索引的类型多种多样,不同数据库之间也存在差异,即便是同样的索引在不同的数据库中也可能存在不同的特性,甚至每中数据库的不同引擎下的索引都有不同的特性,下图是对于MySQL数据库整理的索引类型(忽略这该死的试用模式~):

MySQL索引类型

2. 索引的作用是什么?有什么缺点?

2.1 优点

  • 大大加快数据的检索速度
  • 创建唯一性索引,保证数据库表中每一行数据的唯一性
  • 加速表和表之间的连接
  • 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

2.2 缺点

  • 索引需要占物理空间
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

3. 索引该怎么用?

3.1 适合创建索引的列

  • 经常搜索的列(经常当做Where条件的列)
  • 主键(保证唯一及排序)(InnoDB默认主键是聚集索引)
  • 外键(经常需要连接表的数据)
  • 经常范围搜索(索引会排序,范围搜索会更快)
  • 经常排序的列

3.2 不适合创建索引的列

  • 很少使用的列
  • 数据值种类很少的列(例如:性别)
  • 对于大数据量的列(text、bit等)
  • 查<改的列不适合(维护索引开销太大)

4. 索引的原理是什么?

        索引是一种数据结构,常见的有BTREE、HASH、二叉、红黑树,InnoDB支持BTREE、HASH。

你可能感兴趣的:(数据库索引)