我们先来看看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相关推荐

  1. MySQL常用存储引擎之Innodb

    在MYSQL5.5版本之后,具体是在5.58版本之后,InnoDB代替MYISAM称为MYSQL的默认存储引擎,说实话呢,是一个非常重要的事情,之前在使用MYSQL时,说别人使用InnoDB,而不用m ...

  2. MySQL常用存储引擎详解

    MySQL常用存储引擎详解 一.什么是存储引擎 二.掌握存储引擎的重要性 三.MySQL常用的存储引擎有哪些 四.存储引擎的特性 1.InnoDB 2.MyISAM 3.MEMORY 4.ARCHIV ...

  3. mysql isam 食物_MySQL常用存储引擎之MyISAM

    1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...

  4. mysql myisam引擎_MySQL常用存储引擎之MyISAM

    1. mysql 5.5之前版本默认存储引擎 1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表 1.2 myisam是mysql大部分系统表和临时表使用的存储引擎 2. myisam ...

  5. MySQL - MySQL 常用存储引擎简介

    # 前言 存储引擎在MySQL底层以组件的形式提供,不同的存储引擎提供的存储机制.索引的存放方式和锁粒度等均不相同. 存储引擎基于数据表, 而不是基于数据库, 请根据业务需求为数据表选择最优的存储引擎 ...

  6. MySQL常用存储引擎之Archive

    现在我们来看看另外一种存储引擎,Archive存储引擎,Archive会缓存所有的写,并且利用对插入的行进行压缩,所以Archive存储引擎比MYISAM的表更加节约磁盘的IO,对于同样数量级的数据, ...

  7. MySQL常用存储引擎——Archive

    1,文件系统存储特点 会缓存所有的写并且利用zlib对插入的行进行压缩,所以Archive搜索引擎比MyISAM存储引擎的表,更加节约磁盘I/O,对于同样数量级的数据,Archive存储引擎比MyIS ...

  8. MySQL常用存储引擎之Memory

    看一下MYSQL存储引擎的Memory存储引擎,Memory存储引擎也称之为HEAP存储引擎,从这个存储引擎的名字中呢,可以知道,所有的数据都保存在内存中的,这就意味着呢,这种存储引擎表的数据呢,一旦 ...

  9. MySQL常用存储引擎之CSV

    首先我们来看CSV这种存储引擎,CSV存储引擎呢,可以讲CSV文件,作为MYSQL的表来处理,这种存储引擎的存储格式呢,就是普通的CSV文件,CSV存储引擎的数据存储方式非常的有特点,如果我们把数据存 ...

最新文章

  1. javascript,继承,封装
  2. MyEclipse下Axis2插件的下载和安装
  3. easyui树拖拽排序java_项目中集成Easyui-Tree,可拖拽更新节点
  4. php后静态绑定,详解PHP后期静态绑定分析与应用
  5. 1.3编程基础之算术表达式与顺序执行 20 计算2的幂
  6. chrome稍后阅读功能reading list
  7. Unity3D实现按钮切换Panel的功能
  8. php翻手册时关于一些函数参数的说明
  9. 用英伟达 DIGITS 进行图像分割
  10. 凸函数与Jensen不等式
  11. DllMain——DLL程序入口点函数
  12. 推荐个软件EveryThing(可以快速找到电脑里的各种东西)
  13. 有监督学习,无监督学习,强化学习总结
  14. 一文解决scrapy带案例爬取当当图书
  15. 机器视觉工程师之关于程序员的头发
  16. 海洋CMS采集-内置接口的海洋CMS采集
  17. android触摸屏映射,解决android4.0 触摸屏分辨率映射不准
  18. WGCLOUD——如何统计用户的日活(dau)、月活(mau)数据
  19. Matlab基础知识五
  20. java基础 - 关键字private、protected、default、public、final

热门文章

  1. 关于css的text-indent首行缩进两个字符和图片缩进的问题
  2. dedecms 制作模板中使用的全局标记介绍
  3. js 中的[] {}是什么意思
  4. 【zTree】基于zTree动态生成树节点的一些应用
  5. maven安装使用修改镜像仓库
  6. mysql/mariadb应该使用utf8mb4而不是utf8
  7. LINQ根据某字段GroupBy
  8. 处理Img标签中src无效时出现的border
  9. android 如何判断h5页面是否加载完成_H5 键盘兼容性小结
  10. oracle说明性弹性域,ORACLE EBS 基础和提高 - 说明弹性域(ZHENGANG.ZHU).pdf