数据库索引学习笔记
数据库索引学习笔记

数据库索引学习笔记

数据库中添加索引的目的是为了快速查询和检索数据。常见结构有:B树,B+树和Hash

优势:

  1. 大大加快了数据检索速度。
  2. 保证数据的唯一性,通过唯一索引可以保证数据唯一。
  3. 加速表连接,在连接操作时,如果连接字段上有索引,可以提升性能。

劣势:

  1. 额外占用存储空间
  2. 降低了数据增删改的速度,因为表的数据更新时,需要维护索引结构。

一般行数超过300的表就应该有索引

索引类型

  • 普通索引
  • 唯一索引
  • 主键索引
  • 联合索引(单列索引和多列索引)
  • 全文索引

主键索引:

数据表的主键列就是主键索引。一张表只能有一个主键,并且主键不能为null,不能重复。

在mysql的lnnoDB的表中如果没有显示指定的主键,就会查询表中是否有唯一索引的字段,如果没有就会自动生成一个6Byte的自增主键。

二级索引

二级索引又称为辅助索引,因为二级索引的叶子节点存储的是主键。作用就是用二级索引定位到主键的位置。

  • 唯一索引:不允许出现重复的数据,允许数据为NULL,一张表允许创建多个唯一索引,目的是保证属性列的唯一性。
  • 普通索引:为了快速查询数据,一张表允许创建多个普通索引,允许数据重复和NULL。
  • 前缀索引:只适用于字符串类型的数据,对文本的前几个字符创建索引。
  • 全文索引:为了检索答问比数据中的关键词数据。lnnoDB需要5.6版本后支持。

聚集索引

同一个.ibd文件包含了表的索引和数据,每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。

优势:

  • 聚集索引的查询非常快,因为整个B+树本身就是一颗多叉平衡树,叶子节点也是有序的,定位到索引的节点就相当于定位到了数据。

缺点:

  • 依赖于有序的数据。因为B+树是多叉平衡树,如果数据不是有序的,就需要在插入数据时排序。
  • 更新代价大,如果索引列的数据被修改,对于的索引也要被修改。

非聚集索引

即索引结构和数据是分开了存放的。二级索引属于非聚集索引。

优势:

  • 更新代价跟小。

缺点

  • 也依赖于有序数据。
  • 有可能会二次查询(回表),这是非聚集索引最大缺点,当查到索引对应的指针或者主键后,可能需要根据指针或主键再到数据文件或表中查询

索引创建原则

单列索引:即由一列属性组成的索引。

联合索引:即由多列属性组成索引。

最左前缀原则:SQL语句中使用索引时,需要从索引列的最左边开始,往右边使用,可以不使用全部列,但是不能省略某列,否则索引将失效。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注