MySQL索引

举报
bug郭 发表于 2022/08/11 09:55:35 2022/08/11
【摘要】 索引 概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。索引相等于一本书的目录!!如果我们需要查找一本书中指定内容!我们先是需要找目录,然后通过目录精准定位到你需要查找的内容!!显然 目录提高了查找效率!索引也可以提高我们数据库的查找效率!!!当想显然一本书如果需要目录那么就需要更多的纸!而索引便需...

索引

概念

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

索引相等于一本书的目录!!
如果我们需要查找一本书中指定内容!我们先是需要找目录,然后通过目录精准定位到你需要查找的内容!!
显然 目录提高了查找效率!
索引也可以提高我们数据库的查找效率!!!
当想显然一本书如果需要目录那么就需要更多的纸!
而索引便需要更多的内存!!!

作用

  • 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
  • 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
  • 索引对于提高数据库的性能有很大的帮助。

所以索引对我们数据库的查找效率提高很大!!!

使用场景

  • 数据量较大,且经常对这些列进行条件查询.

我们什么时候翻一本书的内容需要先翻目录然后再查找呢?
显然那是因为书的内容比较多!书比较厚!!
如果书很薄,那我们其实可以直接查找内容即可!!!
而数据库中的索引也一样!!
如果数据库表中的字段较少!!那么添加索引只会浪费空间!!
当我们数据量较大时,添加索引可以很好的提高查找效率!!!

  • 该数据库表中的插入操作,修改操作比较低.

如果作家斌没有将一本书编辑好,还需要大量更改,那么他肯定不会现将目录创建出来!不然后期要频繁更改目录,甚是麻烦! 如果我们的数据库表,修改和插入频率较低,那么索引表便很好的提高了效率!!!

  • 索引会占用额外的磁盘空间!

使用

我们该如何使用索引表呢?
如何给我们的数据库表创建一个索引呢?

创建主键约束(primary key)、唯一约束(unique)、外键约束(foreign key)时,会自动创建对应列的索引。

  • 查看索引:
    show index from 表名;
    在这里插入图片描述
  • 创建索引表:

对于非主键、非唯一约束、非外键的字段,可以创建普通索引!!!

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

案例:创建班级表中,name字段的索引!
在这里插入图片描述可以看到 我们成功创建了名为indexname的索引!!!
在这里插入图片描述

  • 删除索引
    drop index 索引名 on 表名;
    我们将刚刚class_7表中的indexname索引删除!
    在这里插入图片描述

索引背后的数据结构

我们想想我们学过的数据结构,啥结构的查找效率高呢,可能大家首先想到的是顺序表!!
显然顺序表,如果按照下标查找效率高!!但是我们数据库中的查找并不是按照下标查找!
这里的查找是按照值查找!!!
值查找那不就是树形结构查找快吗,所以我们索引用的数据结构就是树形结构!
采用多叉树可以减低高度,提高查找效率!!!

B+树

啥是B+树呢?
那么我们不得不介绍一下B树(B-树)这里并不是B减树!!这里只是B树的另外一种写法!
在这里插入图片描述
可以看到B树,结构简单,就是一个节点,有多个key值 多个key值,分成n+1开区间!
我们通过区间逐步查找,直到根节点即可查到我们需要查找的值!!

B+树
在这里插入图片描述

  • B+就是为了索引而量身打造的!
  • 使用B+查找整体的IO次数大大减少,并且查询稳定,因为树的平衡高,并且每个叶子节点都和其他叶子节点连接!!
  • 叶子节点用链表连接后,非常适合范围查找!!!
  • 所有的数据都保存在叶子节点!!!非叶子节点保存key值即可,占用空间小,甚至可以直接缓存在内存中!!!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200