本文介绍: 索引是帮助MySQL高效获取数据数据结构,主要是用来提高数据检索效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序成本,也能降低了CPU的消耗。通俗来说, 索引就相当于一本书目录, 可以根据页码速查找到指定内容, 目的就是加快数据库查询速度,但这也就意味着书中如果要增加一个章节修改目录比较麻烦的,使用索引用于经常查询很少修改业务1) 顺序访问顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序行数据中找到符合条件目标数据

基本介绍

索引是帮助MySQL高效获取数据数据结构,主要是用来提高数据检索的效率,降低数据库的IO成本,同时通过索引列对数据进行排序,降低数据排序成本,也能降低了CPU的消耗。

通俗来说, 索引就相当于一本书目录, 可以根据页码快速找到指定内容, 目的就是加快数据库查询速度但这也就意味着书中如果要增加一个章节修改目录比较麻烦的使用索引适用于经常查询很少修改业务

在 MySQL 中,通常有以下两种方式访问数据库表的行数据:

1) 顺序访问

2) 索引访问

注意: 建立索引后, 查询速度不一定会变快,例如, 你在teacher表中建立了关于id的索引, 如果你按照name查询, 那么查询速度也不会变快,查询用到你建立的索引

优缺点 

优点:

缺点:

空间换时间

 索引的底层数据结构

B树

B树树就是B-树,它是一种平衡的多叉树,不是B减树,而是B杠树,中文通常称为B树,英语称为B-tree

人们可能会以为B-树是种树,而B树又是一种一种树。而事实上是,B-tree就是指的B树。

B 树的结构下图所示 

B树的主要特点有:

上面那张图所表示的 B 树就是一棵 3 阶的 B 树。我们可以看下磁盘块 2,里面关键字为(8,12),它 有 3 个孩子 (3,5),(9,10) 和 (13,15),你能看到 (3,5) 小于 8,(9,10) 在 8 和 12 之间,而 (13,15)大于 12,刚好符合刚才我们给出的特征然后我们来看下如何用 B 树进行查找。假设我们想要 查找的关键字是 9 ,那么步骤可以分为以下几步:

B 树相比于平衡二叉树来说磁盘 I/O 操作要少 , 在数据查询中比平衡二叉树效率要高。所以 只要树的高度足够低,IO次数足够少,就可以提高查询性能 。 

B+树 

B+树是B树的改造版, 他与B树的不同点有:

B+树的查找与B树不同,当索引部分某个节点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子节点为止。

B+树可以保证精确查询和范围查询的快速查找,MySQL的innodb存储引擎底层就是B+树.

为什么InnoDB选择B+树而不是B树:

    1、B+树的磁盘读取代价低, B树每个节点都有data,B+树只有叶子节才有,假设每个节点大小16KB,那么B+树比B树能存储更多的关键字,一次读入内存的关键字的内存也会更多,B+树的高度也会比B树低,磁盘IO次数会更少。

    2、B+树对范围查询更友好,方便遍历,B树叶子节点没有链接,而B+树叶子节点通过双向指针链接,可以很方便的进行范围查询,比如where条件中 age >= 3 and age < 20,那么当找到3时就可以顺着指针找到20,而B树是不可以的。

    3、B+树查询效率稳定更好, 在B+树中,由于分支节点并不是最终指向文件内容的节点,分支节点只是叶子节点的索引,所以对于任意关键字的查找都必须从根节点走到分支节点,所有关键字查询路径长度相同每个数据查询效率相当。而对于B树而言,其分支节点上也保存有数据,对于每一个数据的查询所走的路径长度是不一样的,效率也不一样,B树稳定性不如B+树好

原文地址:https://blog.csdn.net/m0_62436868/article/details/134604224

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38846.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注