MySQL常用存储引擎之MyISAM
我们先来看看MYISAM这种存储引擎,MYISAM存储引擎呢,是MYSQL5.5以及之前的版本,在MYSQL数据库默认的存储引擎,由于这个原因呢,现在还有大量的服务器使用MYISAM的表,另外MyISAM也是MYSQL大部分系统表和临时表,所使用的一种存储引擎,注意我这里所说的临时表,并不是我们create template所建的临时表,对于create template语句所见的表呢,我们是可以使用各种存在MYSQL中的存储引擎的,而这里所说的临时表呢,是指在排序和分组等操作中,当数量操作一定的大小之后,由查询优化器建立的磁盘临时表
MYISAM存储引擎会将表存储在两个系统文件中,一个是数据文件,以MYD为扩展名,另一个是索引文件,以MYI为扩展名,我们先来看一下下一张表的定义,从左边的图中我们可以看到在这里我们定义了一个名为myIsam的表,并且存储引擎还使用了myisam的存储引擎,右边就是文件系统中,myisam表的存储方式,这里我们可以看到,有三个以myisam开头的文件,除了上面提到过的myd,myi两个文件之外呢,还有一个以frm为扩展名的文件,这个并不是myisam所特有的一个文件,而对于MYSQL的所有存储引擎来说,都会有一个以frm为扩展名的文件,这个文件是用于记录表的结构的,而MYD和MYI两个文件呢,是MYISAM所特有的一个文件
MYSQL最早使用的存储引擎之一,在极漫长的使用过程中呢,已经实现了很多自身的特性,以满足客户的需要,那我们就来看一下MYISAM有哪些特性,所以我们知道了这些特性,我们才能明白,在什么情况下,我们应该使用MYISAM存储引擎,首先MYISAM存储引擎的第一个特性就是,要从并发性和锁级别来看,MYISAM使用的是表级锁,而不是行级所,这个就意味着,只需要在整个表进行加锁,而在表中的数据进行读取时呢,也需要对所有的表加共享锁,从这里我们就可以看到,使用MYISAM存储引擎的表,读取和写入这两种是互斥的,当然在一些情况下呢,当我们对表中的数据进行读取时,也可以在表的末尾,插入数据,因此从上面介绍呢,可以看出,MYISAM对于读写混合操作的并发性不会太好,如果只是只读操作的话,就并发性而言,性能还是可以接受的,因为共享锁呢,并不会阻塞共享锁,他的第二个特性呢,从他的损坏修复来看,MYISAM支持由于任意以外关闭MYISAM表呢,检查和修复操作,像这里所说的修复呢,像这里所说的修复呢,并不是事务恢复,MYISAM并不是事务型的存储引擎,所以也不可能进行事务恢复的相关日志,所以要注意,对MYISAM进行修复,会造成数据的丢失,来对表进行检查,对于发现问题的表呢,可以使用repair table命令呢,对其进行恢复,下面我们就来看看这两个命令是如何使用的
之前说过演示系统是基于MYSQL的一个实例,我们来到test库下,首先我们来建立一个myisam表,他有简单的两个列,一个是id列,一个是c1列,这里要注意的话呢,如果想建立存储引擎的表,就要使用engine这个参数来指定存储引擎,这里我们要建立的是myisam表,现在myisam表就已经建立好了,现在我们就来看看文件系统中,myisam表是如何存储的
我们来到另一个连接下,来看一下myisam这个文件ls -l myIsam*
大家可以看到,就如我们刚才开始说的,MYISAM表呢,在系统文件存储中呢,myisam文件来存储的,frm这个文件,他存储的是这个表的结构信息,另外就是MYD文件,存储的是myisam表的数据信息,以及myi文件,存储的就是索引信息,但我们现在回到第一个连接,check table这个命令,对于这个表会有什么样的效果,大家可以看到,当我们使用check table对这个表进行检查的时候呢,他的message显示的是ok状态,说明这张表是没有任何问题的,如果我们使用repair table呢,同样由于我们这张表没有损坏,repair table也会返回ok的命令,如果有损坏的myisam表的话,就可以使用repair table命令呢,进行修复,另外呢,要注意,repair table对表进行修复的话
mysql还提供了一个命令行的工具,myisamchk --help,这个工具也可以对myisam表进行修复
也可以对myisam表进行修复,有一点大家要注意,如果使用命令行工具对myisam表进行修复的话,则需要咱Mysql服务停止,在mysql服务运行的同时,如果使用命令行工具对表进行修复,可能使表造成更加大的损坏,这一点大家一定要注意,这里我就介绍好了Myisam表一些特点,以及如果损坏如何对他进行修复,下面我们来看一下myisam表还有哪些特性,首先来看看Myisam表所支持的索引,myisam表支持全文索引,并且在mysql5.7之前版本唯一原生就支持全文索引的官方引擎,另外,myisam还支持text和blob的前缀索引,如果myisam是一张很大的只读表的话,也就是在表创建完,进行导入数据后,就不会对表进行任何修改操作了,那么我们就可以对这种表进行压缩操作,这样就可以减少磁盘IO,所以说,myisam表是支持磁盘IO的,如果要对一张表进行压缩呢,我们可以使用myisampack命令,来压缩表中的数据,由于表中的数据是独立进行压缩的,读取单行数据的时候呢,不必对整个表进行解压
来演示一下如何对整张表进行压缩,我们刚才哪张表实际上并不大,一张刚创建的新表,所以如果我们想要使用myisampack命令进行压缩的话,我们需要指定一个-f参数,强制来对他进行压缩,然后我们要指定对这个表的MYI命令,我们接下来看一下效果,返回了说这实际上是一个很小的文件,他只有一条记录,空文件形成了一个压缩格式
因为我们这张表太小,所以在默认情况下,是不能对这张表进行压缩的,所以我们使用-f参数来强制对其进行压缩,所以呢我们会看到,实际压缩之后的文件,比我们压缩前的文件还要大,myisam.old这个文件,是之前文件的一个备份,我们压缩后的文件不但没有变小,反而呢变大了,这是因为我们原来的文件太小了,他只有一行记录,所以完全没有必要进行压缩,这里只是演示了压缩命令是如何使用的,下面我们就来看一下对已经压缩的表,如果我们要进行读写操作,会有什么样的情况发生
我们回到另一个连接,现在咱们的myisam表一已经被压缩了,这个时候我们对myisam进行插入操作,看到这里会返回一个提示,myisam是一个只读的表,所以对已压缩的表呢,不能进行写操作的,只能进行读操作
这里大致的介绍了一下MYISAM存储引擎特性,如果大家对特性还是感兴趣的话,可以看一下myisam的相关手册,来决定是否要使用myisam存储引擎了,下面我们来看一下myisam存储引擎的一些限制,来看看使用myisam表时呢,有什么样的限制,在使用myisam表时,有一点需要注意,就是在mysql5.0之前的版本,myisam表单表最大的文件呢,4个G,如果我们想在单个表存储超过4个G的,需要在建表的时候,通过指定max_rows和平均行长度,这两个参数来实现,这两个参数相乘的大小就是表能达到的最大的大小,对于大表来说,修改这两个参数会导致重建,所以呢,会需要一些时间,如果大家还在使用MYSQL5.0之前的服务的话呢,还是建议大家升级到最新版本的MYSQL的服务器,而对于单表最大4G的限制,MYSQL5.0版本之后呢,就没有了,在MYSQL5.0版本之后呢,单表就变成了256个TB,这就足够我们使用了,这里呢我们就已经完全了解了,myisam存储引擎的限制和特性,那么根据我们这些内容呢,我们就可以很容易的知道,myisam适合在什么样的场景下使用了
所以我们就看看myisam的适用场景,首先第一个适用场景呢,是非事务型应用,myisam首先呢,是一种非事务型的存储引擎,就是说,myisam是不支持事务的,前面给大家介绍了什么叫做事务,以及事务的一些ACID特性,并且也说过,关系型数据库,与其他应用最大的区别呢,是关系型数据库是支持事务的,那这里也说明不支持事务的存储引擎,那这里是不是有一些矛盾呢,虽然Myisam不支持事务,但是mysql其他支持事务的存储引擎呢,InnoDB,所以mysql还是一种支持事务的数据库,而对于Myisam不支持事务的存储引擎呢,也有其适应的场景,首先来说,首先是不是都需要事务呢,我想对于ORACLE应用,比如数据仓库,报表,还有大多数不涉及财务的应用,不需要事务管理性的,那在这样的应用场景中呢,就可以使用myisam这种存储引擎的,由于myisam可以对表进行压缩,所以对于只读的报表的应用呢,是非常合适的,所以myisam另外一个应用场景呢,只读类的应用,前面提到了myisam支持对数据文件的压缩,而且虽然在读取数据时,就加共享锁,共享锁是不会进行阻塞的,对于只读的应用来说,myisam的io和并发性能还是不错的,所以也只有在只读这种应用中呢,可以使用Myisam存储引擎的,myisam这种表的第三种使用场景呢,空间类的一些以应用,在MYSQL5.7之前,MYISAM是唯一支持空间函数的存储引擎,所以我们想在MYSQL中存储空间类的数据,如GPS数据,并且利用空间函数,对所存储的数据进行运算的话,咱们就只能用myisam存储引擎了,除了以上三种类型的应用之外,其他的是不太建议大家使用myisam存储了,大多数情况下使用InnoDB存储引擎,更适合我们的应用场景,下面我们就使用InnoDB存储引擎的特点
MySQL常用存储引擎之MyISAM相关推荐
- MySQL常用存储引擎之Innodb
在MYSQL5.5版本之后,具体是在5.58版本之后,InnoDB代替MYISAM称为MYSQL的默认存储引擎,说实话呢,是一个非常重要的事情,之前在使用MYSQL时,说别人使用InnoDB,而不用m ...
- MySQL常用存储引擎详解
MySQL常用存储引擎详解 一.什么是存储引擎 二.掌握存储引擎的重要性 三.MySQL常用的存储引擎有哪些 四.存储引擎的特性 1.InnoDB 2.MyISAM 3.MEMORY 4.ARCHIV ...
- mysql isam 食物_MySQL常用存储引擎之MyISAM
1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...
- mysql myisam引擎_MySQL常用存储引擎之MyISAM
1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...
- MySQL - MySQL 常用存储引擎简介
# 前言 存储引擎在MySQL底层以组件的形式提供,不同的存储引擎提供的存储机制.索引的存放方式和锁粒度等均不相同. 存储引擎基于数据表, 而不是基于数据库, 请根据业务需求为数据表选择最优的存储引擎 ...
- MySQL常用存储引擎之Archive
现在我们来看看另外一种存储引擎,Archive存储引擎,Archive会缓存所有的写,并且利用对插入的行进行压缩,所以Archive存储引擎比MYISAM的表更加节约磁盘的IO,对于同样数量级的数据, ...
- MySQL常用存储引擎——Archive
1,文件系统存储特点 会缓存所有的写并且利用zlib对插入的行进行压缩,所以Archive搜索引擎比MyISAM存储引擎的表,更加节约磁盘I/O,对于同样数量级的数据,Archive存储引擎比MyIS ...
- MySQL常用存储引擎之Memory
看一下MYSQL存储引擎的Memory存储引擎,Memory存储引擎也称之为HEAP存储引擎,从这个存储引擎的名字中呢,可以知道,所有的数据都保存在内存中的,这就意味着呢,这种存储引擎表的数据呢,一旦 ...
- MySQL常用存储引擎之CSV
首先我们来看CSV这种存储引擎,CSV存储引擎呢,可以讲CSV文件,作为MYSQL的表来处理,这种存储引擎的存储格式呢,就是普通的CSV文件,CSV存储引擎的数据存储方式非常的有特点,如果我们把数据存 ...
最新文章
- javascript,继承,封装
- MyEclipse下Axis2插件的下载和安装
- easyui树拖拽排序java_项目中集成Easyui-Tree,可拖拽更新节点
- php后静态绑定,详解PHP后期静态绑定分析与应用
- 1.3编程基础之算术表达式与顺序执行 20 计算2的幂
- chrome稍后阅读功能reading list
- Unity3D实现按钮切换Panel的功能
- php翻手册时关于一些函数参数的说明
- 用英伟达 DIGITS 进行图像分割
- 凸函数与Jensen不等式
- DllMain——DLL程序入口点函数
- 推荐个软件EveryThing(可以快速找到电脑里的各种东西)
- 有监督学习,无监督学习,强化学习总结
- 一文解决scrapy带案例爬取当当图书
- 机器视觉工程师之关于程序员的头发
- 海洋CMS采集-内置接口的海洋CMS采集
- android触摸屏映射,解决android4.0 触摸屏分辨率映射不准
- WGCLOUD——如何统计用户的日活(dau)、月活(mau)数据
- Matlab基础知识五
- java基础 - 关键字private、protected、default、public、final
热门文章
- 关于css的text-indent首行缩进两个字符和图片缩进的问题
- dedecms 制作模板中使用的全局标记介绍
- js 中的[] {}是什么意思
- 【zTree】基于zTree动态生成树节点的一些应用
- maven安装使用修改镜像仓库
- mysql/mariadb应该使用utf8mb4而不是utf8
- LINQ根据某字段GroupBy
- 处理Img标签中src无效时出现的border
- android 如何判断h5页面是否加载完成_H5 键盘兼容性小结
- oracle说明性弹性域,ORACLE EBS 基础和提高 - 说明弹性域(ZHENGANG.ZHU).pdf