索引(MySQL)

目录

  • 一、概念
  • 二、索引的解决的问题
  • 三、作用
  • 四、索引的工作原理
  • 五、索引的使用
    • 1、使用场景
    • 2、相关指令

一、概念

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现

二、索引的解决的问题

1、如果没有索引,我们使用的查找方式就是顺序查找;

2、使用索引,避免遍历,优化查询速度(会降低插入和删除的速度,但实际工作中,很多场景下,查询操作比插入和删除操作使用的频繁的多)

三、作用

(1)数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。

(2)索引所起的作用类似书籍目录,可用于快速定位、检索数据。

(3)索引对于提高数据库的性能有很大的帮助

四、索引的工作原理

1、底层数据结构:B+树(N叉搜索树)

2、优势:

(1)和Hash表相比:能处理模糊查询的情况

Hash查找需要明确知道key是什么,但是对于类似where name = “王%”;这样的模糊查询就不可以实现

(2)和二叉搜索树相比:高度更低查找效率更高

二叉搜索树虽然可以解决模糊匹配的问题,但是查询效率低

(3)和B树相比

<1> B书中非叶子节点可能会存储数据,B+树的叶子结点只是用来辅助进行查找,数据一定在叶子节点上

<2> B+树的每一层兄弟节点之间都是互相连通的(类似于链表,便利起来更方便,尤其是在指定区域查找的时候)

3、主键索引和其他列的索引是不一样的

(1)主键索引中的叶子节点存储的是一条一条的记录,借助主键进行查找,一次就可以完成查找(当一个表已经包含主键,数据库就是通过B+树的结构来组织所有记录的)

(2)其他列索引的叶子节点存储的是对应主键的id值,先根据索引找到主键id,在用主键id在主键索引中查找,需要查找两次

五、索引的使用

1、使用场景

(1)要考虑对数据库表的某列或某几列创建索引,要注意:

数据量较大,且经常对这些列进行条件查询。
该数据库表的插入操作,及对这些列的修改操作频率较低。
索引会占用额外的磁盘空间

满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率

(2)如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引

2、相关指令

创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引

(1)查看索引

-- 查看索引
show index from 表名;

-- 示例:查看学生表已有索引
show index from student;

(2)创建索引

-- 创建索引
create index 索引名 on 表名(字段名);

-- 创建班级表中,name字段的索引
create index idx_classes_name on classes(name);

(3)删除索引

-- 删除索引
drop index 索引名 on 表名;

-- 示例:删除班级表中name字段的索引
drop index idx_classes_name on classes;

你可能感兴趣的:(MySQL)