2016 - 2024

感恩一路有你

电脑有必要打开索引功能吗 数据库中的索引,原理是什么?为什么查询使用索引就会快?

浏览量:3668 时间:2023-04-25 21:04:47 作者:采采

数据库中的索引,原理是什么?为什么查询使用索引就会快?

也许很多程序员朋友对数据的索引根本不并不陌生,最常见的索引是BTree索引,索引这个可以减慢数据库的检索速度,只不过会会降低新增、修改、删除掉操作的速度,一些出现错误的写造成索引失去效果等等。

但是要是被问到,我想知道为什么用索引之后,网站查询都会变快?BTree索引的原理是什么?这时候很多人肯定就到底了,今天我就以MySQL的InnoDB引擎为例,一讲BTree索引的原理。

索引的基础知识MySQL的基本存储结构是页,差不多就是这个样子的:

在这里,我们要知道一点100元以内几点(非常重要):

当我们用MySQL的InnoDB引擎创建表,有且只能有一个主键;要是我们就没不显示地指定之间,那你MySQL会自动提取一个流露字段才是主键;

聚集索引:以主键修改的索引;聚集索引的叶子节点储存的是表中的数据;

非能聚集索引:非主键修改的索引;非涌去索引在叶子节点储存的是主键和索引列;建议使用非聚集索引网上查询数据,会查询到叶子上的主键,再参照主键查到数据(这个过程叫做什么回表)。

页和页之间、页和数据之间的关系我们以涌去索引做讲解时,页和页之间、这些页和数据之间的关系是这样的:

数据页和数据页之间,横列一个双向链表;

每个数据页中的记录,是一个分流链表;

每个数据页都参照内部的记录生成一个页目录(Pagedirectory),假如是主键的话,可以在页目录中可以使用二分法急速定位;

如果没有我们依据一个非主键、非索引列并且查询,那你是需要循环遍历顿井站链表,不能找到处的页;再循环遍历页内的单边链表;如果不是表内数据太大的话,这样的查询都会很慢。

BTree索引的原理先让我们看一下BTree索引差不多是什么样子(以围聚/主键索引为例):

要是这时候我们要网上查询id16的数据:

网站查询页-1,找到页-2存储位置的是小于等于30的数据;

可以查询页-2,找到页-5存储的是10~20的数据;

可以查询页-5,找不到id16的数据。

很显然,也没用索引的时候,不需要遍历过程上下行链表来定位不对应的页,而有了索引,则是可以一层层“目录”定位到按的页上。

为么BTree索引会减低新增、修改、删掉的速度BTree是一颗平衡树,假如对这颗树再新增、修改、删除掉的话,会彻底的破坏它的重新组合结构;

我们在做数据新增审批、修改、删掉的时候,要花额外的时间去程序维护索引;

正毕竟这些额外的开销,造成索引会降低新增、修改、删出的速度。

思考题,欢迎下方留言再讨论现在你是否需要理解了BTree索引的原理?

到最后再留一个思考题:为啥官方建议您可以使用自增长的速度主键充当索引?大家可以不在留言中写了你的答案。

我将缓慢彼此分享Java开发、架构设计、程序员职业发展等方面的见解,我希望能得到你的关注;参与我后,可私信你的邮箱数字【1】,查看海量藏书学习资料。

电脑开机索引,什么都打不开?

一个是完全恢复G盘。一个是减小C盘空间,我建议你先最好不要过多后运行系统,先用PE盘进入PE,用diskgenius软件先去搜索丢失的分区。能重新恢复就先可以恢复分区表中的G分区,这样的话再用PE光盘驱动的数据恢复软件恢复就简单点了。如果没有搜索不到弄丢分区,那就先在diskgenius软件中记好F盘的终止柱面和H盘的起始柱面,然后再在数据恢复软件中实际这两个数据的区间进行系统扫描完全恢复。

速度变大C盘空间的话用diskgenius也很更方便,C盘,右键,扩大之类的

数据 主键 速度 BTree

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。