索引 (index),好比书的目录 (index)
本质上:用来加快查找的效率
例: 如果想找 id 为 8 的学生信息
如果数据库中没有索引,此时查找的时候就需要把数据库的整张表遍历一遍
索引就是为了避免数据库进行顺序查找,提高查找效率
若没有索引,此时的查找过程,就相当于一个"顺序表查找",即:依次遍历每条记录,来查找记录
若是针对顺序表查找,顺序表是在内存中的,内存访问速度快,并且数据也没那么多
若是针对数据库顺序查找,数据库的数据是在磁盘上,磁盘访问速度更慢,并且数据量也可能非常多,这个速度可能就会很慢
索引是一种数据结构,可以帮助我们快速的进行数据的查找
索引可以考虑的数据结构
二叉树(二叉搜索树),如果比较平衡,那么查找效率:O(logN)
哈希表,查找效率:O(1)
数据库的索引可以考虑使用哈希,但会出现一些问题:
.
例如: 查找 id < 6 并且 id > 3的学生信息
select * from student where id > 3 and id < 6;
像这样的操作,哈希表无法完成
哈希只能处理相等的情况,不能处理 >,<,>=,<=,between and… 的情况
哈希的查找过程: 把 key 代入哈希函数,计算得到下标,再根据下标取到对应的链表,再去遍历比较 key 是否相等
考虑使用二叉搜索树:
二叉搜索树内部元素是有序的(中序遍历结果有序)
.
例如: 查找 id < 6 并且 id > 3的学生信息
select * from student where id > 3 and id < 6;
先找到 id 为6 的元素
再找到 id 为 3 的元素
中序遍历,3 和 6 之间的结果就是想要的结果
中序遍历效率 : O(N)
二叉搜索树相比于哈希表,虽然可以处理范围查找,但是处理效率不高
原因:
真实的索引结构,是一种 N叉搜索树 —— B+ 树
要想认识 B+ 树,需要先认识 B树 (B- 树)
(有B 树,B+ 树,没有 B减树)
二叉树用来做索引的问题:
B Tree 特点:
B+ 树
B+ 树 特点:
B+ 树 改进优点:
加快查询效率,但会减慢插入 / 修改 / 删除的效率 (需要同步调整索引结构)
索引也会占用额外的空间 (本质上是在用空间换时间)
应用在经常查询但是很少修改的场景上
创建主键约束、唯一约束、外键约束时,会自动创建对应列的索引
给具体的表中某列加索引的时候,加在主键上的索引和加在其他列上的索引是完全不一样的
加在主键的索引,叫:主键索引
主键索引的叶子节点存的是数据的完整记录
其他索引的叶子节点村的就是主键的 id
例: 如果按 name 查找,先通过搜索 “王五” 对应的主键 id,再根据主键 id 去主键索引中查找到具体记录 (回表)
show index from [ 表名 ];
create index 索引名 on [ 表名 ] (字段名);
比较耗时
drop index 索引名 on [ 表名 ];
比较耗时
主键索引不能删除,删除会报错!
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_47988201/article/details/121007478
内容来源于网络,如有侵权,请联系作者删除!