mysql文档--myisam存储引擎--myisam引擎全解--底层探索

阿丹:

        myisam存储引擎与innodb存储引擎战争,在mysql中5.5.5之前myisam还是mysql的默认存储引擎但是在5.5.5版本之后被innodb反超。

官方解释:

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性与并发违规处理机制,后来就逐渐取代MyISAM。

简介:

MyISAM是MySQL的默认存储引擎之一,它在MySQL关系型数据库管理系统中的默认存储引擎是InnoDB。但是,在MySQL 5.5.5之前的版本中,MyISAM是默认存储引擎。

MyISAM存储引擎是一种基于ISAM代码的存储引擎,它扩展了ISAM代码,提供了许多有用的功能,如全文索引、压缩和空间函数等。MyISAM存储引擎的表存储在三个文件中,包括.frm文件(保存表的定义)、.MYD文件(保存表的数据)和.MYI文件(保存表的索引)。

MyISAM存储引擎的特点包括:

  1. 表级锁:MyISAM存储引擎只支持表级锁,这意味着在执行写操作时,整个表会被锁定,从而降低了并发性能。
  2. 全文索引:MyISAM支持全文索引,这使得它在处理需要大量全文搜索的应用时比其他存储引擎更有优势。
  3. 缓存索引:MyISAM可以通过key_buffer_size缓存索引,以提高访问性能,减少I/O操作。
  4. 表的大小和存储空间大小是固定的:这使得它在处理大量数据时可能需要进行表迁移或重新分片。

总的来说,MyISAM存储引擎适用于读操作较多,写操作较少,并发性要求不高的场景。然而,随着数据库技术的发展,InnoDB存储引擎由于其对事务参照完整性、并发性等特性的改进,逐渐取代了MyISAM存储引擎。

myisam存储引擎底层知识--基础大纲:

MyISAM存储引擎底层的知识大纲包括以下几个方面:

  1. 存储结构:MyISAM存储引擎的表数据存储在三个文件中,包括.frm文件(保存表的定义)、.MYD文件(保存表的数据)和.MYI文件(保存表的索引)。数据文件和索引文件是分开存储的。
  2. 表级锁:MyISAM存储引擎只支持表级锁,这意味着在执行写操作时,整个表会被锁定,从而降低了并发性能。
  3. 全文索引:MyISAM支持全文索引,这使得它在处理需要大量全文搜索的应用时比其他存储引擎更有优势。
  4. 数据缓存:MyISAM可以通过key_buffer_size缓存索引,以提高访问性能,减少I/O操作。但是,这个缓存区只会缓存索引,而不会缓存数据。
  5. 表的大小和存储空间大小是固定的:这使得它在处理大量数据时可能需要进行表迁移或重新分片。
  6. 大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持。当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成。
  7. 每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16。NULL被允许在索引的列中,这个值占每个键的0~1个字节。
  8. 在myisam存储引擎底层也是用的B+数来作为存储的数据结构的。

总的来说,MyISAM存储引擎适用于读操作较多,写操作较少,并发性要求不高的场景。但是,随着数据库技术的发展,InnoDB存储引擎由于其对事务参照完整性、并发性等特性的改进,逐渐取代了MyISAM存储引擎。

myisam底层详解:

存储结构

MyISAM存储引擎的存储结构包括三个文件,分别是表定义文件、数据文件和索引文件。具体说明如下:

  1. 表定义文件:存储表的定义信息,文件扩展名为.frm。
  2. 数据文件:存储表的数据,扩展名为.MYD。每个MyISAM表在磁盘上存储成三个文件,包括表定义文件、数据文件和索引文件。
  3. 索引文件:存储表的索引信息,扩展名为.MYI。

MyISAM的存储结构使得它具有一些特点,例如支持三种不同的存储格式(静态表、动态表、压缩表),支持全文索引等。同时,MyISAM存储引擎的表大小只受限于操作系统文件的大小,一般为2GB,这使得它在处理大量数据时可能需要进行表迁移或重新分片。

MyISAM存储引擎使用的B+树中,各个节点存放的是键(key)和指针(Ptr)。在B+树中,每个节点可以存储多个键,这些键按照升序排列。除了键之外,节点还包含指向子节点和父节点的指针。

在MyISAM存储引擎中,B+树被用于实现索引和排序操作。具体来说,当建表时,MyISAM存储引擎以主键作为KEY来建立主索引(主索引在MyISAM存储引擎中默认是主键),使用B+树作为索引结构。B+树的叶子节点存储的是对应数据的物理地址。

对于非主键索引,MyISAM存储引擎会将索引和数据分开存储。索引文件中的每个节点存储的是索引和对应数据的地址,而不是实际的数据内容。当查询数据时,需要先通过索引文件找到对应数据的物理地址,然后再根据物理地址去读取数据文件。

总之,MyISAM存储引擎使用的B+树中,各个节点存放的是键(key)和指针(Ptr),其中键用于唯一标识节点中的数据,指针用于指向树中其他节点的地址。

myisam存储结构的B+树与innodb中B+树的区别

MyISAM和InnoDB是MySQL中两种不同的存储引擎,它们在存储结构方面有一些区别。下面我将详细介绍它们之间B+树的区别。

  1. 索引结构:

    • MyISAM使用B+树作为其索引结构,但是它的叶子节点存储的是实际的数据行的指针。这意味着数据和索引是分离的,索引文件和数据文件是分开存放的。
    • InnoDB也使用B+树作为其索引结构,但是它的叶子节点存储的是实际的数据行本身,而不是指针。这样可以减少磁盘IO的次数,提高查询性能。
  2. 数据存储方式:

    • 在MyISAM中,数据是按照插入的顺序存储的,所以对于大量的插入操作来说,性能会较好。但是由于数据和索引是分离的,所以在查询时可能需要进行多次磁盘IO操作,导致查询性能相对较低。
    • 在InnoDB中,数据是按照主键的顺序进行存储的,并且数据和索引是紧密结合的。这提供了更好的查询性能,尤其是对于涉及多个表之间的连接查询时。
  3. 事务支持:

    • MyISAM存储引擎不支持事务。如果有并发的读写操作,可能会导致数据不一致。
    • InnoDB存储引擎支持事务处理,提供了ACID(原子性、一致性、隔离性和持久性)的事务特性。这使得在并发环境下数据的一致性得到保证。

总的来说,InnoDB存储引擎在数据一致性和并发性能方面更优于MyISAM。因此,在需要事务支持和高并发性能的场景下,推荐使用InnoDB存储引擎。

引入概念:

        聚簇索引与非聚簇索引

当讨论存储引擎的索引结构时,通常会涉及到聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index)这两个概念。让我为您解释一下它们的区别和作用。

  1. 聚簇索引(Clustered Index):

    • 聚簇索引指的是将数据存储在物理上连续的顺序中(通常是按照主键的顺序)。在InnoDB中,聚簇索引是默认的索引类型。
    • 聚簇索引决定了表中数据的物理排列顺序,因此表按照聚簇索引的顺序进行存储。因此,一个表可以只有一个聚簇索引。
    • 聚簇索引的优势是能够提高范围查询和按照顺序访问数据的性能,因为相关的数据通常存储在一起,减少了磁盘IO操作。
  2. 非聚簇索引(Non-clustered Index):

    • 非聚簇索引是基于表的副本而创建的一种索引结构,它的叶子节点包含索引字段的值和指向实际数据行的指针。
    • 在MyISAM中,所有的索引都是非聚簇索引,包括主键索引。而在InnoDB中,非聚簇索引是除了聚簇索引以外的索引。
    • 一个表可以有多个非聚簇索引。非聚簇索引可以加快特定列或组合列的查找速度,但在执行范围查询时性能可能较差。

根据上述解释,聚簇索引和非聚簇索引的区别在于数据存储的方式和索引叶子节点的内容。聚簇索引决定了数据行的物理顺序,而非聚簇索引提供了对聚簇索引之外列的快速访问。这两种索引类型在不同的场景下,对于查询性能和存储效率会有不同的影响。

那到底在数据引擎中myisam有没有优势呢?

在某些特定的场景下,MyISAM存储引擎具有一些优势。以下是优势:

  1. 插入性能:MyISAM适用于主要进行插入操作的应用程序。由于MyISAM的表在物理上以插入的顺序存储数据,因此在大量插入操作的情况下,MyISAM可能会比InnoDB具有更高的插入性能。

  2. 空间使用效率:相比于InnoDB,MyISAM通常具有更小的存储空间需求。这是因为InnoDB在存储数据时会包括一些额外的管理和事务日志信息,而MyISAM则没有这些额外的开销。

  3. 全文搜索:MyISAM是MySQL中唯一一个支持全文搜索索引的存储引擎。如果你的应用程序需要进行全文搜索,MyISAM可能是一个更好的选择。

需要注意的是,尽管MyISAM在某些方面可能具有一些优势,但它也有一些明显的限制和缺点。例如,它不支持事务和外键约束,容易出现数据不一致的情况。此外,在并发读写的情况下,MyISAM的性能可能不如InnoDB稳定。

综合考虑,对于大多数场景下,推荐使用InnoDB存储引擎,特别是对于需要事务支持、高并发性能和数据一致性的应用程序。但如果你的应用场景主要是插入操作频繁,并且不需要事务支持或数据一致性,那么MyISAM可能是一个备选的选项。请根据自己的实际需求做出选择。

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

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

相关文章

时间复杂度与空间复杂度详解

时间复杂度与空间复杂度详解🦖 一、算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 二、时间复杂度2.1 时间复杂度的定义2.2 大O的渐进表示法2.3 如何记录表示算法复杂度 三、空间复杂度3.1 空间复杂度的定义3.2 小试牛刀 一、算法效率 1.1 如何衡量一个算法…

PlantUML——类图(持续更新)

前言 在分析代码流程中,我们常常会使用到各种UML图,例如用例图、时序图和类图等,以往使用ProcessOn或亿图图示等工具,但是这些工具难以规范化,有没有一种用代码来生成图形的工具呢? 刚好在出差的晨会中机缘…

Day 36 贪心算法 part05 : 435. 无重叠区间 763.划分字母区间 56. 合并区间

56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:inte…

springboot MongoDB 主从 多数据源

上一篇,我写了关于用一个map管理mongodb多个数据源(每个数据源,只有单例)的内容。 springboot mongodb 配置多数据源 临到部署到阿里云的测试环境,发现还需要考虑一下主从的问题,阿里云买的数据库&#x…

华为OD:VLAN资源池

题目描述: VLANO 是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。 定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表…

vue+springboot+mysql的垃圾分类管理系统

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

离散性行业介绍及与MES系统的好处

离散型行业是指那些生产、制造或提供一种有形产品或明确定义的服务的行业,这些产品或服务通常可以分为离散的单位,而且它们的生产通常遵循一定的工序或流程。与连续型行业不同,离散型行业的生产过程通常是间断的,而不是连续的。 …

什么是lockbit勒索病毒,中了勒索病毒怎么办?勒索病毒解密,数据恢复

lockbit是一种勒索病毒,是一种极具破坏性的电脑病毒,它利用加密技术来锁定用户文件,并以此为条件向用户勒索钱财。lockbit病毒的传播方式有通过电子邮件附件、恶意网站、点对点网络等多种途径进行传播。这种病毒一旦侵入电脑系统,…

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令:npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(9 月 11 日论文合集)

文章目录 一、检测相关(1篇)1.1 SegmentAnything helps microscopy images based automatic and quantitative organoid detection and analysis 二、分割|语义相关(4篇)2.1 AMLP:Adaptive Masking Lesion Patches for Self-supervised Medical Image Segmentation2.2 Grouping…

C++数据结构--红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的节点的定义四、红黑树结构五、红黑树的插入操作参考代码 五、代码汇总 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过…

MySQL——笔试测试题

解析: 要查询各科目的最大分数,可以使用如下的SQL语句: SELECT coursename, MAX(score) FROM t_stuscore GROUP BY coursename; 这条SQL语句使用了MAX()聚合函数来获取每个科目的最大分数,并使用GROUP BY子句按照科目进行分组…

Nginx重写功能

Nginx重写功能 一、Nginx常见模块二、访问路由location2.1location常用正则表达式2.2、location的分类2.3、location常用的匹配规则2.4、location优先级排列说明2.5、location示例2.6、location优先级总结2.7、实例2.7.1、location/{}与location/{}2.7.2、location/index.html{…

数字花园的指南针:微信小程序排名的提升之道

微信小程序,是一片数字花园,其中各种各样的小程序竞相绽放,散发出各自独特的芬芳。在这个花园中,排名优化就像是精心照料花朵的园丁,让我们一同走进这个数字花园,探寻如何提升微信小程序的排名优化&#xf…

MyBatis:自定义分页插件

一、mapper <select id"selectCountry3" resultType"cn.edu.tju.domain.Country" >select * from country</select>二、接口&#xff1a; List<Country> selectCountry3(RowBounds rowBounds);三、插件定义&#xff1a; package cn.ed…

积木报表 JimuReport v1.6.2-GA版本发布—高危SQL漏洞安全加固版本

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

DES和3DES等常见加解密的关键要素---安全行业基础篇3

DES和3DES DES和3DES是对称加密算法&#xff0c;其加密和解密的关键要素包括&#xff1a; 密钥&#xff1a;DES和3DES使用相同长度的密钥进行加密和解密。DES使用56位密钥&#xff0c;而3DES可以使用112位或168位密钥。密钥是保护数据安全的关键&#xff0c;必须保持机密并只…

RHCSA Linux环境搭建

目录 一、安装Linux操作系统 二、创建虚拟机 1、成功激活后&#xff0c;开始“创建新的虚拟机” 新建虚拟机 2、自定义--根据我们的需求来创建 3、默认即可 4、选择稍后安装操作系统&#xff08;可自定义设置某些选项&#xff09; 5、选择Linux操作系统&#xff0c;版本…

【数据结构面试题】栈与队列的相互实现

目录 1.队列实现栈 1.1创建栈 1.2判断是否为空 1.3入栈 1.4出栈 1.5获取栈顶元素 1.6完整代码 2. 用栈实现队列 2.1创建队列 2.2判断是否为空 2.3入队列 2.4出队列 2.5获取队头元素 2.6完整代码 1.队列实现栈 用队列实现栈https://leetcode.cn/problems/impleme…

【C++11】{}初始化、std::initializer_list、decltype、STL新增容器

文章目录 1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype 4. nullptr5. 范围for循环6. 智能指针7. C11STL中的一些变化8. 演示代码 1. C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1…