MySQL索引
索引
概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
索引相等于一本书的目录!!
如果我们需要查找一本书中指定内容!我们先是需要找目录,然后通过目录精准定位到你需要查找的内容!!
显然 目录提高了查找效率!
索引也可以提高我们数据库的查找效率!!!
当想显然一本书如果需要目录那么就需要更多的纸!
而索引便需要更多的内存!!!
作用
- 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
- 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
- 索引对于提高数据库的性能有很大的帮助。
所以索引对我们数据库的查找效率提高很大!!!
使用场景
- 数据量较大,且经常对这些列进行条件查询.
我们什么时候翻一本书的内容需要先翻目录然后再查找呢?
显然那是因为书的内容比较多!书比较厚!!
如果书很薄,那我们其实可以直接查找内容即可!!!
而数据库中的索引也一样!!
如果数据库表中的字段较少!!那么添加索引只会浪费空间!!
当我们数据量较大时,添加索引可以很好的提高查找效率!!!
- 该数据库表中的插入操作,修改操作比较低.
如果作家斌没有将一本书编辑好,还需要大量更改,那么他肯定不会现将目录创建出来!不然后期要频繁更改目录,甚是麻烦! 如果我们的数据库表,修改和插入频率较低,那么索引表便很好的提高了效率!!!
- 索引会占用额外的磁盘空间!
使用
我们该如何使用索引表呢?
如何给我们的数据库表创建一个索引呢?
创建主键约束(
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
值即可,占用空间小,甚至可以直接缓存在内存中!!!
- 点赞
- 收藏
- 关注作者
评论(0)