为什么用B+树做索引&MySQL存储引擎简介

索引的数据结构

为什么不是二叉树,红黑树什么的呢?

首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上。然后一般一个结点一个磁盘块,也就是读一个结点要进行一次IO操作。

而二叉树啊这些树类的数据结构,查找时间主要和树的高度有关,所以虽然一颗AVL树或者是红黑树在查找上比起顺序遍历的O(N)有了比较大的改善,但B树和B+树因为每个结点存的元素更多,所以查询更快,对磁盘的IO操作也更少。

为什么是B+树而不是B树呢?

1. 单一节点存储更多的元素(这样该节点下分支变多了,树变矮胖了),使得查询的IO次数更少。

B+树真正的数据都存在叶子结点嘛,也就是上面的结点就简单的索引,就内存会更小,意味着同样的一个页内存大小,所以B+树中,同样的磁盘页大小可以装更多个“索引”,也就是在同样的数据量的情况下,B+树会比B树更加矮胖,因此查询时IO的次数也更加少。

2. 所有查询都要查找到叶子节点,查询性能稳定。

B+树的查询必须查到叶子结点,因为它真正的数据都在叶子嘛,而B树不是,B树只要匹配到那个索引data就好,无论它是在中间结点还是叶子结点,因此B树的查询不是稳定的,最好的情况是只找根节点就行,最坏的情况是找到叶子结点,而B+树的每次查找都是稳定的。

3. 所有叶子节点形成有序链表,便于范围查询。

B树的范围查询十分麻烦,B+树的范围查询只需要在最下面的叶子结点的链表中做遍历就行。

关于MySQL存储引擎的简单介绍(全都复制粘贴的)

存储引擎?

定义:

数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。

存储引擎作用:

1)设计并创建数据库以保存系统所需的关系或XML文档。

2)实现系统以访问和更改数据库中存储的数据。包括实现网站或使用数据的应用程序,还包括生成使用SQL Server工具和实用工具以使用数据的过程。

3)为单位或客户部署实现的系统。

4)提供日常管理支持以优化数据库的性能。

Innodb和MyIASM

1.简单介绍这两种引擎,以及该如何去选择。
2.这两种引擎所使用的数据结构是什么。

1.怎么选择

a.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。它本身实际上是基于Mysql后台的完整的系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。当进行Select count(*) from table指令的时候,需要进行扫描全表。所以当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。

b.MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先。

  补充2点:

  c.大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的。

  d.大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较的快,尤其是在并发量大的时候。

2.两种引擎所使用的索引的数据结构是什么?

答案:都是B+树!

MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。

Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。

参考文章:

https://blog.csdn.net/qq_35571554/article/details/82759668——《漫画叙述B+树和B-树,很值得看!》分析为什么是B+而不是B树,生动形象

https://www.cnblogs.com/sunsky303/p/8274586.html——《mysql各种引擎对比、实战 》这篇文章介绍了存储引擎的概念

https://www.cnblogs.com/xiaohaillong/p/6079551.html——《mysql的常用引擎 》,分析Innodb和MyIASM两个引擎

原文地址:https://www.cnblogs.com/wangshen31/p/10519557.html

时间: 2024-10-21 21:00:29

为什么用B+树做索引&MySQL存储引擎简介的相关文章

第 3 章 MySQL 存储引擎简介

3.1MySQL 存储引擎概述 到后来,MySQL 意识到需要更改架构,将前端的业务逻辑和后端数据存储以清晰的层次结构拆分开的同时,对ISAM 做了功能上面的扩展和代码的重构,这就是MyISAM存储引擎的由来. MySQL 的插件式存储引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon, Memory,Archive,Merge,Federated 等,其中最著名而且使用最为广泛的MyISAM 和Innodb两种存储引擎.MyISAM 是MySQL 最早的I

mysql 存储引擎简介 --小丑

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL

mysql存储引擎简介

MySQL存储引擎差异化实验

本篇把MySQL最常用的存储引擎给大家做一个介绍,然后通过插入.修改和并发实验来了解和验证一下它们之间的一些差异. 一.MySQL存储引擎简介 存储引擎在MySQL结构里占据核心的位置,是上层抽象接口和存储的物理文件之间的桥梁.每一种storage engine 架构组件都是根据特定的场合来设计的,负责数据的 I/O 操作,并启用一些特性的支持. MySQL存储引擎被设计为插件式结构,每种存储引擎可从运行的mysql里动态加载或卸载.我们可以在客户端连接后用show plugins;查看当前加载

MySQL存储引擎以及索引原理

一.MySQL存储引擎:MySQL将数据用各种不同的技术存储在文件中,这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.这些不同的技术以及配套的相关功能在 mysql中被称作存储引擎(也称作表类型).建表时,选择合适的存储引擎很重要,如果到后期再更换将会很麻烦.存储引擎是基于表的,而非数据库. 个人理解:存储引擎是某张表存储数据.如何为存储的数据建立索引和更新.查询数据库等技术的实现方法集合及约束.常见的存储引擎如下图: 这里,先总结常用的三种存储

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

mysql 存储引擎,字段类型,索引介绍

一:常用的存储引擎:1,myisam:    我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:     1>tb_demo.frm,存储表定义:     2>tb_demo.MYD,存储数据:     3>tb_demo.MYI, 存储索引.   特点: 查询快,写入慢,支持表锁,支持符合全文索引    适合管理邮件,web服务器的日志数据,选择密集结构表的时候用,插入密集结构   表的时候用2,innodb     1>更新密集的表.InnoDB存储引擎

Mysql(二)-索引、存储引擎

########################################################## Mysql索引:类似于书的目录类型:-->普通索引 index-->唯一索引 unique-->主键 primary key-->外键 foreign key 优点:提高查询速度缺点:减缓写入的速度 ####################################################################################

MySQL索引创建与删除,MySQL存储引擎的配置

MySQL索引创建与删除 1.1 问题 本案例要求熟悉MySQL索引的类型及操作方法,主要练习以下任务: 普通索引.唯一索引.主键索引的创建/删除 自增主键索引的创建/删除 建立员工表yg.工资表gz,数据内容如表-1.表-2所示,设置外键实现同步更新与同步删除 表-1 员工表yg的数据 表-2 工资表gz的数据 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:索引的创建与删除 创建表的时候指定INDEX索引字段 创建库home: mysql> create database home;