数据库学习03——深入理解 MySQL InnoDB 和 MyISAM 底层 B + 树的区别

news2024/9/22 1:49:06
  • 推荐学习文档
    • golang应用级os框架,欢迎star
    • 免费的数据库学习专栏

文章目录

    • 引言
    • B + 树基本原理简述
    • InnoDB 的 B + 树
      • 1.索引结构与数据存储
      • 2.辅助索引
    • MyISAM 的 B + 树
      • 1.索引与数据分离
      • 2.非聚簇索引
    • 区别总结
      • 1.数据存储位置
      • 2.索引类型
    • 性能影响与适用场景
      • 1.性能影响
      • 2.适用场景
    • 结论

引言

在 MySQL 数据库中,InnoDB 和 MyISAM 是两种常用的存储引擎。它们在数据存储和检索方面都依赖于 B + 树结构,但在底层实现上存在一些关键的区别。本文将深入探讨这两种存储引擎的 B + 树的区别。

B + 树基本原理简述

  • B + 树是一种平衡的多路搜索树,它的特点包括:
    • 所有叶子节点构成一个有序链表,便于范围查询。
    • 非叶子节点只存储索引信息,不存储实际数据。

InnoDB 的 B + 树

1.索引结构与数据存储

InnoDB 使用 B + 树来构建索引,并且其数据存储方式是聚簇索引。聚簇索引的叶子节点存储的是整行数据。例如,我们创建一个简单的表:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

当我们基于 id 列构建索引时,id 就是聚簇索引,叶子节点直接包含了 name、age 等其他列的数据。

2.辅助索引

InnoDB 除了聚簇索引外,还有辅助索引。辅助索引的叶子节点存储的是主键值,而不是实际数据。例如,我们在 name 列上创建一个辅助索引,当通过 name 进行查询时,先在辅助索引的 B + 树中找到对应的主键值,然后再通过聚簇索引找到整行数据。

MyISAM 的 B + 树

1.索引与数据分离

MyISAM 使用 B + 树构建索引,但它的数据和索引是分开存储的。索引文件存储索引信息,数据文件存储实际的数据。例如创建一个类似的表:

CREATE TABLE myisam_users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

对于索引列,其 B + 树的叶子节点存储的是数据文件中对应记录的指针。

2.非聚簇索引

MyISAM 中所有的索引都是非聚簇索引,无论是主键索引还是其他索引。

区别总结

1.数据存储位置

  • InnoDB:聚簇索引叶子节点存储数据,辅助索引叶子节点存储主键值。
  • MyISAM:索引叶子节点存储数据指针,数据单独存储在数据文件。

2.索引类型

  • InnoDB:有聚簇索引和辅助索引。
  • MyISAM:所有索引都是非聚簇索引。

性能影响与适用场景

1.性能影响

  • 由于数据存储方式和索引结构的不同,在不同的操作场景下性能表现不同:
    • 对于频繁的范围查询,InnoDB 的聚簇索引因为数据的物理顺序和索引顺序一致,可能更具优势。
    • 对于频繁的读写操作并发度高的场景,InnoDB 的行级锁能减少锁冲突,性能更好。

2.适用场景

  • InnoDB:适用于对事务完整性要求高、需要行级锁支持的场景,如在线事务处理系统(OLTP)。
  • MyISAM:适合读密集型的场景,如数据仓库、报表系统等,在这些场景中对数据一致性要求相对较低。

结论

通过对 MySQL InnoDB 和 MyISAM 存储引擎底层 B + 树的区别分析,我们可以更好地理解它们在数据存储和检索方面的工作原理。在实际应用中,根据具体的业务需求和性能要求选择合适的存储引擎对于数据库的性能和可扩展性至关重要。

关注我看更多好用又有意思的文章哦!👉👉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找算法 01分块查找

自己设计一个分块查找的例子,不少于15个数据元素,并建立分块查找的索引 基于上述例子,计算查找成功的ASL、查找失败的ASL 拓展: ‌‌分块查找的平均查找长度(‌ASL)的计算公式如下‌:‌ ‌顺序…

Camunda流程引擎并发性能优化

文章目录 Camunda流程引擎一、JobExecutor1、工作流程2、主要作用 二、性能问题1、实际场景:2、性能问题描述3、总结 三、优化方案方案一:修改 Camunda JobExecutor 源码以实现租户 ID 隔离方案二:使用 max-jobs-per-acquisition 参数控制上锁…

ThreadLocal与AsyncLocal

简介 ThreadLocal 用于在多线程环境中创建线程局部变量,可以让每个线程独立地访问自己的变量副本,互不影响。 而 AsyncLocal 是 ThreadLocal 的异步版本,专门用于异步编程场景,在异步操作中它可以正确处理上下文切换。 ThreadLo…

ftp服务的管理及安全优化

1.ftp介绍 ftp : file transfer proto 互联中最老牌的文件传输协议 2.vsftpd安装及启用 环境 #server 主机 : # R3 # 192.168.10.130 # selinux 关闭 # 火墙开启 # dnf 安装设定完成 # #client 主机 : # R4 # 192.168.10.131 # selinux 关闭 …

C++之职工管理系统(细节Q)

指针初始化类 && 普通变量初始化类 抽象基类worker,只需编写 .h ,无需 .cpp 底层实现 类 记得声明权限public!!!不然默认private,主函数访问不了 记得继承父类 Worker * worker:指向Wo…

source insight学习笔记

目录 目的 基础配置 1、护眼的保护色 2、行号显示 基础操作 目的 记录一下使用source insight中遇到的问题。比如常见好用的基础配置,常用的基础操作等。主要是为了自己以后忘记了好找。自己写的东西总归看起来更舒服。 PS:目前是第一个版本&#…

Linux相关概念和重要知识点(5)(权限的修改、时间属性)

1.权限的修改 (1)提权行为 普通用户是会受到权限的限制,但root账户无视一切权限限制,因此当我们要获取更高的权限,有一种办法就是将自己变成root或者短暂拥有和root一样的权力。 普通用户 -> root :s…

NoSql数据库Redis知识点

数据库的分类 关系型数据库 ,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 ,全称为 Not Only SQL &a…

网络丢包定位记录(二)

网卡驱动丢包 查看:ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量,还包括too-long-frames错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。 …

K8S介绍+集群部署

Kubernetes介绍 官网:https://kubernetes.io/ 一、应用部署方式演变 1、传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其他技术的参与 缺点:不能为应用程序定义资源使用边界&a…

WAN广域网技术--PPP和PPPoE

广域网基础概述 广域网(Wide Area Network,WAN)是一种覆盖广泛地区的计算机网络,它连接不同地理位置的计算机、服务器和设备。广域网通常用于连接不同城市、州或国家之间的网络,它通过互联网服务提供商(ISP…

九芯电子革新健康检测!语音播报血压计ic芯片解决方案

血压计,可测量血压并将读数显示在屏幕上。为了提高老年人和视障人士的可用性,现代电子语音血压计已经开发出来,可提供当前血压读数的听觉反馈。这是通过集成语音芯片来实现的,该芯片将测量结果发声给用户。 (一&#x…

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&#xff09…

《使用 LangChain 进行大模型应用开发》学习笔记(四)

前言 本文是 Harrison Chase (LangChain 创建者)和吴恩达(Andrew Ng)的视频课程《LangChain for LLM Application Development》(使用 LangChain 进行大模型应用开发)的学习笔记。由于原课程为全英文视频课…

银河麒麟桌面操作系统V10(SP1)离线升级SSH(OpenSSH)服务

目录 前言 准备工作 准备与目标服务器相同版本的操作系统 准备编译依赖包 下载OpenSSL源码包 下载OpenSSH源码包 升级OpenSSH服务 查看当前版本信息 安装编译依赖包 安装OpenSSL 安装OpenSSH 前言 OpenSSH是一个广泛使用的开源SSH(安全壳)协议的实现,它提供了安…

01-ZYNQ linux开发环境安装,基于Petalinux2023.2和Vitis2023.2

TFTP 服务器配置 安装安装 tftp-hpa 和 tftpd-hpa ;tftp-hpa 客户端,tftpd-hpa 为服务端 #安装 tftp-hpa 和 tftpd-hpa sudo apt-get install tftp-hpa tftpd-hpa配置服务器 #创建路径 mkdir -p ~/workspace/tftp-boot chmod 777 ~/workspace/tftp-b…

开放式耳机什么品牌好?2024年开放式蓝牙耳机排行榜推荐

​开放式耳机绝对是个不错的选择,它们长时间佩戴耳朵也不会感到疲劳,对耳朵的健康也很友好。虽然过去存在一些漏音的问题,但与它们带来的便利相比,这点儿小瑕疵几乎可以忽略不计。漏音可能会对他人造成干扰,也可能影响…

vue3(整合版)

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端,配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 输入如下命令创建第一个Vue项目 3.下载依赖,启动项目 访问5173端口 …

年度巨献 | OpenCSG开源最大中文合成数据集Chinese Cosmopedia

01 背景 近年来,生成式语言模型(GLM)的飞速发展正在重塑人工智能领域,尤其是在自然语言处理、内容创作和智能客服等领域展现出巨大潜力。然而,大多数领先的语言模型主要依赖于英文数据集进行训练,中文数据…

python:给1个整数,你怎么判断是否等于2的幂次方?

最近在csdn上刷到一个比较简单的题目,题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方,题目如下: 题目的答案如下: def isPowerofTwo(n):z bin(n)[2:]print(bin(n))if z[0] ! 1:return Falsefor i in z[1:]:if i !…