【MySQL】MyISAM中的索引方案

news2024/9/21 14:36:15

介绍

B+树索引使用存储引擎如表所示:

索引/存储引擎MyISAMInnoDBMemory
B+树索引支持支持支持

多个存储引擎支持同一种类型的索引,但是他们的实现原理是不同的。

InnoDB和MyISAM默认的索引是B+树索引,而Memory默认的索引是Hash索引。

MyISAM引擎使用B+树作为索引结构,叶子节点的data域存放的是数据记录的地址

原理

MyISAM是没有聚簇索引的,所有的索引都理解为二级索引。

数据和索引是分离的。

MyISAM的索引方案也使用了树形结构,却是将索引和数据分开存储的。

  • 将表中的记录按照记录的插入顺序单独存储在一个文件中,叫数据文件。
  • 使用MyISAM存储引擎的表会将索引信息存储到另一个文件中,叫索引文件。MyISAM会单独为表的主键创建一个索引,但是在索引的叶子节点中存储的不是完整的用户记录,而是主键值+数据记录地址

在这里插入图片描述

上图中,表一共有3列,假设以Col1位主键,可以看出MyISAM的索引文件仅仅保存数据记录的地址。

在MyISAM中,主键索引和二级索引在结构上没有区别,只是主键索引要求key是唯一的,而二级索引的key可以重复。如果在Col2上建立一个二级索引,则此索引的结构如下:

在这里插入图片描述

在MyISAM中索引检索的算法为:

  • 按照B+树搜索算法搜索索引,如果指定的key存在,则取出其data域的值
  • 以data域的值为地址,在数据文件中读取相应的数据记录。

MyISAM和InnoDB的对比

MyISAM的索引方式是非聚簇的,和InnoDB中包含1个聚簇索引是不同的。

1、在InnoDB中,只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录,而在MyISAM中需要进行一次回表操作,表示MyISAM中建立的索引都是二级索引

2、InnoDB的数据文件就是索引文件,而MyISAM索引文件和数据文件是分离的。

3、InnoDB的非聚簇索引data域存储相应记录主键的值,而MyISAM索引记录的是地址。

4、MyISAM的回表操作是十分快速的,主要是拿地址偏移量直接到文件中取数据。

5、InnoDB要求表必须有主键,而MyISAM可以没有。

小结

了解不同存储引擎的索引实现方式对于正确使用和优化索引非常有帮助。

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

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

相关文章

【软件测试】在Windows使用Docker搭建CentOS环境(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 我们做软件测试在…

租服务器跑代码、pycharm连接服务器跑代码、Xshell连接服务器运行代码

一、服务器 1.1 注册 推荐使用矩池云服务器,按时按量计费,服务器自带镜像可选,可将要运行的项目上传到网盘 注册网址:矩池云 1.2 租用 选择合适的租用 1.3 选择镜像 选择合适的系统镜像 1.4 复制命令 进入租用列表&#xff…

【每日挠头算法题(9)】二叉树的直径|二叉树的层序遍历

文章目录 一、二叉树的直径思路:二叉树的深度优先搜索具体代码如下: 二、二叉树的层序遍历思路:借助队列实现具体代码如下: 总结: 一、二叉树的直径 点我直达~ 思路:二叉树的深度优先搜索 根据题目要求&a…

【计网】第三章 数据链路层

文章目录 数据链路层一、使用点对点信道的数据链路层1.1 数据链路和帧1.2 三个基本问题封装成帧透明传输差错控制 二、点对点协议 PPP2.1 PPP 协议的特点2.2 PPP 协议的帧格式2.3 PPP 协议的工作状态 三、使用广播信道的数据链路层3.1 局域网的数据链路层3.2 CSMA/CD 协议3.3 使…

安规测试简介(二)-常见安规认证测试之CE认证

CE认证: CE是法语的缩写,英文意思为 “European Conformity” 即”欧洲共同体”, 事实上,CE还是欧共体许多国家语种中的"欧共体"这一词组的缩写,原来用英语词组EUROPEAN COMMUNITY 缩写为EC,后因欧共体在法文…

python---字典(1)

字典的创建 字典: 是一种存储键值对的 键值对: 键(key) 值(value) 根据key可以快速的找到value (key和value有一定的映射关系) 在python字典中可以包含很多键值对,但是键是唯一的. 创建一个空的字典 创建字典的同时,设置初始值 推荐写法是如下的字典的初始化: 字典查找ke…

unittest教程__assert断言(4)

测试用例是否测试通过是通过将预期结果与实际结果做比较来判定的,那代码中怎么来判定用例是否通过呢?在python中这种判定的方法就叫做断言,断言可以使用python的assert方法,也可以使用unittest框架提供的一系列断言方法。 unitte…

强化历程2-Vue+axios+ajax面试系列(2023.6.17)

因为主要是后端,在此训练都是非常基础的题目,后续会持续更新… 文章目录 强化历程2-Vueaxiosajax面试系列(2023.6.18第一次更新)题目汇总1 Vue常用指令2 v-show和v-if区别3 讲一讲MVVM4 vue特点?5 vue组件之间的传值6 vue整合其他框架7 vue生命周期8 vue中实现路由…

通过共享内存进行通信(嵌入式学习)

通过共享内存进行通信 概念特点函数示例代码 概念 在Linux中,共享内存是一种进程间通信(IPC)机制,允许多个进程共享同一块内存区域。这种通信方式可以提供高效的数据传输,特别适用于需要频繁交换数据的场景。 IO间进…

【运动控制】安装固高运动控制卡驱动程序

【运动控制】安装固高运动控制卡驱动程序 1、背景2、卸载PCI设备3、安装驱动4、安装验证 1、背景 运动控制卡是用来做什么的?顾名思义,用来控制电机转动的。 本博客简单介绍固高科技(深圳)有限公司的运动控制卡的驱动安装。 在购买了固高控制卡后&…

网络层(3)6/12

1.网络层 网络层最大的特点就是提供路由,路由就是分组从源到目的地址时,绝定的端到端的路径 路由:路由是网络层最主要的工作任务 网关:一个网络域到另一个网络域的关卡,主要用于不同网段之间的通讯 路由的获取方式&…

OpenGL之鼠标拾取和模型控制

文章目录 鼠标拾取转化步骤步骤 0:2D 视口坐标步骤 1:3D 规范化设备坐标步骤2:4d 均匀剪辑坐标步骤3:4D 眼(相机)坐标步骤4:4d 世界坐标 源码 模型控制源码 鼠标拾取 转化步骤 使用鼠标单击或“…

PMP考试成绩查询流程

具体查询方法如下 当你在PMI的注册邮箱收到一封PMI发来的,标题为: 祝贺您获得PMP认证的邮件时,表明你通过了PMP考试。 若没收到邮件,可通过以下方式进行成绩查询: 1、打开PMI官网:www.pmi.org&#xff0…

给初级测试工程师的一些避坑建议

我遇到的大多数开发人员都不怎么热衷于测试。有些会去做测试,但大多数都不测试,不愿意测试,或者勉而为之。我喜欢测试,并且比起编写新的代码,愉快地花更多的时间在测试中。我认为,正是因为专注于测试&#…

【文生图系列】基础篇-变分推理(数学推导)

文章目录 KL散度前向 vs 反向 KL前向KL反向KL可视化 问题描述变分推理ELBO: Evidence Lower Bound参考 此篇博文主要介绍什么是变分推理(Variational Inference , VI),以及它的数学推导公式。变分推理,是机器学习中一种流行的方式,使用优化的…

LLMs模型速览(GPTs、LaMDA、GLM/ChatGLM、PaLM/Flan-PaLM、BLOOM、LLaMA、Alpaca)

文章目录 一、 GPT系列1.1 GPTs(OpenAI,2018——2020)1.2 InstructGPT(2022-3)1.2.1 算法1.2.2 损失函数 1.3 ChatGPT(2022.11.30)1.4 ChatGPT plugin1.5 GPT-4(2023.3.14&#xff0…

【kubernetes】集群架构介绍与基础环境准备

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

Something of Information Security Management

1、信息安全管理基本概念,管理的目标、对象的基本内容、必要性。 信息安全管理是指通过制定和实施一系列的管理措施,保护信息系统中的信息资源免受各种威胁和风险的侵害,确保信息系统的安全、可靠、高效运行。信息安全管理的基本概念包括&…

java 文本处理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目文本分词算法

一、源码特点 java 文本处理系统是一套完善的java web信息管理系统,利用java 对文本语句进行分词,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse…

paddlespeech asr语音转录文字;sherpa 实时语音转录

1、paddlespeech asr语音转录文字 参考: https://github.com/PaddlePaddle/PaddleSpeech 安装后运行可能会numpy相关报错;可能是python和numpy版本高的问题,我这里最终解决是python 3.10 numpy 1.22.0; pip install paddlepadd…