java0104. MySQL 高级 - 索引 - 概述

目录

简介

什么是索引?索引的作用?

未建立索引的情况

建立索引的情况

非索引和索引性能比较


简介

讲解了Linux系统中MySQL的安装以及MySQL的启动之后,接下来我们进入到课程内容的第二个部分:索引

那对于MYSQL当中的,所以我们在这块儿主要讲解以下六个方面的内容。

那首先我们需要来讲解的就是 MySQL 当中索引的概述。那希望通过这个索引概述这小节的学习,大家能够掌握。

什么是索引?索引的作用?

第一点什么是索引?第二点索引的作用是什么?能够理解这两点即可。

那接下来呢,我们就进入到索引概述这一块儿的学习。那索引在MYSQL的官方网站上,他是这么来定义的,就是说索引是帮助MYSQL进行高效查询的一种数据结构。那这块儿实际上已经说明了,所以什么是索引,索引就是一种什么?就是一种数据结构。然后它的作用是什么呢?作用就是高效获取数据,或者叫高效查询

然后呢,在MySQL当中啊,除了在我们的表结构当中记录了相关的数据以外。那实际上还去维护了去查找这一部分数据的一个数据结构。而这部分的数据结构就以某种方式,指向了我们MySQL数据库表结构当中的这些记录。就指向了这些记录,例如如下表的记录

 然后呢,我们通过这种数据结构就可以快速的来查询表结构当中的数据,而这种查找数据的这种数据结构就就是索引。

所以呢,对于这一块儿,大家知道什么是索引,索引就是一种数据结构,它的作用是什么?作用就是为了高效获取数据。

未建立索引的情况

那接下来在这一块儿呢,给大家提供了这一幅示意图。这幅示意图当中就给大家描述了,没建立索引之前是什么样子,建立了索引之后又是什么样子。

 那接下来我们来分析一下,索引是怎么来进行高效获取数据的。好,我们来打开mspaint。打开我们这一块儿的一个画板,通过画板通过一幅图,给大家简单说明一下。大家来看,这是我们的一张数据库表。在数据库表的左侧这一块,则展示的是我们每一条记录对应的一个物理地址。然后右侧这一块儿呢,是我们两列,左侧这一块儿序号,右侧是一些数据值(ID)。

好,那接下来。数据库表结构有了,接下来我们要查询数据。查询哪个数据呢?我要查询ID为34的数据。查询ID为34的数据,那这个时候啊。因为我们只有表,那这个时候他就会自上往下的进行遍历,这个时候走到第一个发现,这一块儿的第一个就是34,这样的话我就查询一条记录,而且第一条就是那查询速度是不是就会很快。

 好,这只是第一种情况,接下来再来看,接下来我在这块儿要查询的是什么呢?

我要查询的这个ID是91,那这个时候你再想一想,如果查询的ID是91,我在这块儿需要从上往下进行遍历,遍历第一条记录不是,第二条记录不是,第三条记录还不是,到第四条记录,发现是91,是我们想要的数据。那这个时候我们需要去遍历这个列表4次,或者说需要去查找四次。

 然后接下来继续来看,如果我们在这一块儿遍历的不是91,而是遍历的是3,这个时候再来看,那接下来从上往下进行一次遍历,一直到遍历到列表的最底部,才把这个3查找到,这个时候就相当于我们要进行一个全表扫描。

 大家来看,对于我当前这幅示意图当中的这个表结构,里面的数据比较少,就七八条数据。但是如果在实际开发当中数据量比较大,我一张表当中存储了几百万、上千万的记录。那这个时候,我们在查找的时候从上往下进行,整表扫描,这种查询效率是非常慢的。这就是这一块儿给大家罗列的第一种情况,没有建立索引的情况,查询效率很慢

建立索引的情况

好,那接下来我们再来分析,有了索引之后,他又是如何进行快速查找的?我们来画第二幅图,那这个时候呢,我们有了表结构,我们还需要对表结构当中的这个字段来建立索引。

那建立索引这一块儿,我们刚才提到索引就是一种数据结构。那我们这里是不是可以考虑,使用一种数据结构来表示这一块儿的索引,这里我们采用的一种数据结构叫做二叉树

好。既然是一个树状结构,那首先进来的第一个节点就是34,那34这个节点呢,就作为了我当前树状结构的根节点。然后接下来继续起来,接下来ID是77,对于二叉树来说,它有个特点,在根节点进来之后,当我们在插入下一个节点的时候,他会拿来和根节点进行一个比较。如果比根节点小,放在我们的左边,生成一个左子树。如果比根结点大,放在右边这一块儿,作为右子树存在。那这个时候来看,77比34大,所以这个时候放34的右边。这是77,就是34这个根节点它的一个子节点。

             

   

好,继续来看,接下来ID为5,你想5是不是比34要小,我们刚才提到小放左边,放右边。是不是放左边,所以接下来34又有一个字节点5

接下来要进来的是91,比34肯定是要大,那这个时候那就意味着放34的右边,这个时候要说明了,我们当前用的是一个二叉树,也就意味着每一个结点最多只有几个分支?只有两个分支,所以叫二叉。那接下来如果有了2个分支之后,接下来91比34大,这个时候呢,应该放右边,但是右边已经有元素77,这个时候还要和77进行比较。比77大,依然要放77这一块儿的右边,作为77的一个子节点存在。

 明白。接下来继续来看,接下来是22,那接下来22的话比34小,走左边,比5大,那就是放在我们5这个节点的右边。

然后接下来还有另外的两个元素,一个是59。那59这个元素来看。59首先和34进行比较,那和34进行比较,比34要大,所以放右边,和77进行比较,比77要小,所以应该放在77的,叶子节点的左边,这是59。

接下来就还有最后的一个元素3。那3在这一块儿应该放在我们34的左边,并且放在5的左边的节点

好,那到此我们这个二叉树就已经构建完毕了,接下来我们再来分析一下。我构建了这样一个二叉树,他就能够提高我们的查询效率吗?

好,我们来看,二叉树构建好了之后,接下来我们再进行搜索,如果按照我们刚才的思路,我们先搜索34,这个时候他就要先到,我们的这个索引的这个结构,二叉树的结构当中来进行搜索。

在进行二叉树搜索的时候,它是从根结点开始搜的,最顶层的这个节点就是根结点。下面的这些节点,这叫叶子节点。查询34,走根节点就已经把数据查询到了,这个时候直接返回。

如果我们在这块儿查询的不是34,而是3,这个时候来看,那这个时候他先搜索根节点,发现3比根节点小还是比根节点大?3比根节点小,这个时候它走左边去搜索左子树。左子树左边的这个字数就叫左子树。搜索到5和3进行比较,3比5还要小,所以再去搜索5左边的这个字数字节点,这个时候就找到3。

 而找到了3之后,他是如何关联到我们的左边这块表结构当中的数据的呢?这个时候再来看我们刚才提到的一句话。在数据之外,数据库还维护着满足特定查找算法的数据结构就是我们提到的索引,这些数据结构以某种方式指向或引用数据

那也就意味着,我右边这一块儿的这个树状结构的数据,数据结构它是指向我们左边这一块儿的具体的数据的

找到了3这个ID,我通过这个指向以及引用,我是不是就能够找到这一条数据。那这样的话,我们就查找到了这个数据。

非索引和索引性能比较

那接下来我们再来分析一下,我们右侧建立了索引之后和左侧没建立这一块儿的索引之前,它的性能的一个提升。

来看。如果是左侧,我在这块儿要查询3,我需要把整张表结构当中所有的数据都进行遍历词,直到找到3这个ID。

但是,如果是右边的话,我在这一块儿来看,我们只需要找几次,找第一次34,找第二次5,第三次就是3。

那这样的话,我是不是就不用再去遍历整张表啦,通过这个树状结构就可以快速的定位到,我们这一块儿的具体的元素,那这就是我们的索引。

索引就是一个数据结构,它的主要目的就是快速的来查找我们的数据

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被开发耽误的大厨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值