MySQL 存储引擎 MyISAM详解(最新推荐)

2025-05-30 03:50

本文主要是介绍MySQL 存储引擎 MyISAM详解(最新推荐),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要...

MySQL 5.5 之前默认的存储引擎

使用 MyISAM 存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要是读的场景。

️‍一、MyISAM 存储引擎的特性

MySQL 存储引擎 MyISAM详解(最新推荐)

MyISAMInnoDB 的主要区别

  • 外键
  • 事务
  • Hash 索引
  • 锁粒度

MySQL 存储引擎 MyISAM详解(最新推荐)

️‍二、MyISAM 的主要优势

  • MyISAM 表的最大行数为(232)^2及(1.844E+19)行;
  • 每个MyISAM表最多可以创建64个索引,每个索引最多可以包含16个列;
  • 支持并发插入;
  • 通过 CREATE table 创建表时,指定 DATA DIRECTORY=PATHINDEXDIRECTORY=PATH 将数据文件和索引文件放在不同设备的不同目录中,从而提高访问速度:
  • BLOBTEXT 数据类型的列也可以被索引;
  • 在索引列中允许使用NULL值;
  • 如果 mysqld 启动时设置了 myisam_recover_options 系统变量,那么 MyISAM 表在打开时进行会自查,如果上一次表没有正确关闭将会修复;
  • 表中 VARCHARCHAR 列的长度总和最多可达64KB。
  • UNIOUE 约束的长度不受限制

️‍

在MySOL8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=MyISAM

MySQL 存储引擎 MyISAM详解(最新推荐)

创建 MyISAM 表会根据表名生成三个不同后缀名文件,分别是以.MYD(MYData)为后缀的数据文件,以.MYI(MYIndex)为后缀的索引文件,以.sdi为后缀的表信息描述文件(jsON格式)
在8.0以前的版本中表信息描述文件是以.frm为后缀的二进制文件

MySQL 存储引擎 MyISAM详解(最新推荐)

️‍四、MyISAM 表存储格式

  • MyISAM 表支持三种不同的存储格式
  • 其中 FIXED 静态(固定)格式和 DYNAMIC 动态格式,根据使用的列类型自动选择,
  • 第三种是javascript 压缩格式,只能使用 myisampack 实用程序生成并且是只读格式
  • 当表中没有 BLOBTEXT 数据类型的列,在使用 CREATE TABLE或 ALTER TABLE 语句创建或修改表时,可以结合 ROW_FORMAT表选项将表格式设置为FIXED或DYNAMIC。
  • 使用 myisamchk 实用工具对已压缩的MyISAM进行解压操作,myisamchk --unpachKgslzk。

4.1 静态格式(Fixed-Length)表

  • 静态格式MyISAM 表的默认格式,当表不包含可变长度的列( VARCHARVARBINARYBLOBTEXT)时使用,每行都使用固定数量的字节存储。
  • MyISAM 的三种存储格式中,静态格式是最简单和最安全的(最不容易损坏),同时也是php最快的磁盘格式,因为每行的长度固定,根据索引中的行号乘以行长度就可以计算出行位置,此外,读取固定数量的行也非常的高效。
  • 静态格式表具有以下特点:
    • CHARVARCHAR 类型的列用空格填充到指定的列宽;
    • BINARYVARBINARY 类型的列用 0x00 字节填充到列宽每个允许为NULL的列,都用一个 1 BIT 的额外空间记录当前列是否为空;。
    • 速度非常快,且易于缓存;。
    • 崩溃后易于重建,因为行都位于固定位置,。
    • 通常需要比动态格式表更多的磁盘空间;。

4.2 动态格式表

当表中包含可变长度列(VARCHARVARBINARYBLOBTEXT )或者在创建表时使用 ROW_FORMAT=DYNAMIC选项,则表格式为动态存储格式

动态格式表具有以下特点:

  • 列类型是字符串,且长度大于等于4,长度都是动态的:
  • 每一行都有一个标志来指示行有多长,当因更新操作而变得更长时,数据可能存储在不连续的空间,可以使用 OPTIMIZE TABLE table_name 语句或 myisamchk -r 对表进行碎片整理;
  • 每个允许为NULL的列,都用一个 1 BIT 的额外空间记录当前列是否为空;
  • 每行前面都有一个 bitmap(位图),用来记录包含空字符串或0的列,如果字符串类型的列长度为零,或者数字列的值0,则在位图中标记并且不会保存到磁盘;
  • 通常磁盘空间占用比固定长度表要少很多;。
  • 每行都单独压缩,每列都可能用单独的方式进行压缩。

常用的压缩方式:

  • 如果数值列的值为0,无论原始数据类型是哪种都用一个 BIT 类型存储。
  • 如果整数列中的值范围较小,则尽可能使小的类型存储该列,比如:列中的值范围在 -128 到 127 之间,即使原始类型为 bigint(8bytes),也使用 TINYINT(1 byte) 类型存储
  • 如果列中只有一小组可能出现的值,则数据类型转换为 ENUM;

4.3 压缩存储格式

  • 压缩存储格式是使用 myisampack 工具生成的只读格式数据表,压缩表可以用 myisamchk 解压缩。
  • 压缩格式表具有以下特点:
    • 压缩表占用很少的磁盘空间,最大限度地减少了磁盘使用:
    • 可以用于固定长度或动态长度
    • 行压缩表是只读的,因此不能在表中更新或添加数据:

总结

本篇博文对 【MySQL】存储引擎 - MyISAM详解 做了一个较为详细的介http://www.chinasem.cn绍,不知道对你有没有帮助呢

到此这篇关于MySQL 存储引擎 MyISAM详解(最新推荐)的文章就介绍python到这了,更多相关MySQL 存储引擎 MyISAM内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL 存储引擎 MyISAM详解(最新推荐)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154850

相关文章

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

C++ RabbitMq消息队列组件详解

《C++RabbitMq消息队列组件详解》:本文主要介绍C++RabbitMq消息队列组件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. RabbitMq介绍2. 安装RabbitMQ3. 安装 RabbitMQ 的 C++客户端库4. A

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

MySQL查看表的最后一个ID的常见方法

《MySQL查看表的最后一个ID的常见方法》在使用MySQL数据库时,我们经常会遇到需要查看表中最后一个id值的场景,无论是为了调试、数据分析还是其他用途,了解如何快速获取最后一个id都是非常实用的技... 目录背景介绍方法一:使用MAX()函数示例代码解释适用场景方法二:按id降序排序并取第一条示例代码解