》》思维导图

》》介绍

  mysql中的存储引擎都是以插件的形式存在,目前用的最多存储引擎就是innodb和myisam。MySQL5.5.5以后(包括5.5.5)默认使用InnoDB存储引擎,之前的版本基本就是MyISAM的了。现在有很多人都在网上问,innodb作为存储引擎之后,myisam引擎是不是要被淘汰了?其实它们两者之间各有优势,暂时还不能说谁替代谁,不存在滴。

》》存储结构

  创建一个myisam数据表

mysql> create table myisam(
-> id int not null primary key auto_increment,
-> cs varchar(50) not null comment 'test'
-> )engine=myisam default charset=utf8;
Query OK, 0 rows affected (0.10 sec)

  查看表结构(具体的查看和操作,请看上篇MySQL查看和修改表的存储引擎

mysql> show create table myisam;
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------------+
| Table | Create Table |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------------+
| myisam | CREATE TABLE `myisam` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cs` varchar(50) NOT NULL COMMENT 'test',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
-----------------+
1 row in set (0.00 sec)

  再具体看下底层的myisam数据表的文件组成:

windows下的表结构:

linux下的表结构是一样的,我就不贴出来了。

看到myisam表是由.frm, .MYD, .MYI三个文件组成:

.frm 是表结构文件

.MYD 是数据文件

.MYI 是索引文件

》》特性--不支持事务

  例子如下:

--》上面已经创建了一个myisam表,表结构如下:

mysql> desc myisam;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| cs | varchar(50) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

--》操作如下:

--》好吧!没有对比就没有伤害!下面试下Innodb是否成功:

》》特性--修复表

  主要两个SQL操作语句:

  check table YOUR_TABLE_NAME

  repair table YOUR_TABLE_NAME

实例如下:

注意:这里的修复表,并不是说可以将之前删除的数据找回来,切记切记!

》》特性--加锁和并发
   加锁:对整张表进行加锁,而不是行。
           并发:在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。
                在写数据的时候,获得排他锁,会把整个表进行加锁,而其他的连接请求(读,写请求)都处于等待中。
  注意:这里就是为什么MyISAM表不适合做频繁的读写操作的数据表的存储引擎!
》》特性--列索引以及延迟索引

  列索引,其实在这里我并不想写太多,后面我会专门写一篇关于如何建立索引,注意事项以及如何优化索引。

  这里我主要想讲的是延迟索引这个参数,挺有意思的,myisam专有物

  延迟更新索引,MYISAM 默认把DELAY_KEY_WRITE开启, 整个选项是MYISAM引擎独有的。

  

很多人都知道在建立索引上的表进行写操作时,插入大量数据的速度会非常慢,很多办法是先关闭索引,然后插入数据,再打开索引。其实将delay_key_write选项打开,可以得到一定程度的插入速度优化。如果你的某个表有很多update操作,这个参数的优势会很好的体现出来。因为这个参数能延迟更新索引到表关闭。再提醒一次:

  注意:DELAY_KEY_WRITE选项是MYISAM存储引擎的专有的

》》特性--表压缩

主要使用myisampack命令

由于这张表是空表,所以在压缩的时候加了-f,表示强制压缩。下面看下压缩后的文件大小:

大家有没有发现多了一个OLD文件,这是对原来MYI文件的一个备份,之前是0kb,然后再看下新的MYI文件,目前是1.0K,压缩后的文件没有变小反而变大了,为什么呢?

这是由于原文件是个空文件,强制压缩之后肯定会比原文件大的,多了一些乱七八糟的东西在里面啦。

注意:压缩后的文件再执行写操作时会报错,这是由于压缩后的文件会变成只读状态!!切记啊。

》》基础限制

  在版本 < MySQL 5.0 时默认表的大小为4G,这对于一些大业务的数据来说是不够的。

  有什么办法可以扩展吗?有的。

  如存储大表则要修改MAX_Rows 和 AVG_ROW_LENGTH这两个选项。但是一定配置了这两个参数后,表会立刻重写。

  所以最好的建议就是更新MySQL的版本啦。

  在版本 > MySQL 5.0 时默认表的大小为256TB,这对于我们绝大部分的业务来说都是足够的了。

》》应用场景

  最后来说下myisam存储引擎适合使用在哪些应用场景下:

  1.看了上面的特性,其实我们很容易知道,需要用到事务型的应用都不适合,只能使用在非事务型应用

  2.对于锁表而不是锁行的行为,同样的myisam不适合用在频繁操作写的应用下,这会造成阻塞,最好用在只读类应用下。

    3.这个就比较特殊了,上面也没提到过,空间类应用,在MySQL 5.7只前,myisam是唯一支持空间函数的存储引擎,如果想存储空间数据例如GPS数据,或者使用空间函数运算的话,只能使用MyISAM存储引擎。

欢迎留言。O(∩_∩)O哈哈~

mysql 系统性浅聊 myisam 存储引擎【原创】的更多相关文章

  1. Mysql更换MyISAM存储引擎为Innodb的操作记录

    一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...

  2. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分.不同的存储引擎决定了 ...

  3. (MariaDB/MySQL)MyISAM存储引擎读、写操作的优先级

    MariaDB/MySQL中使用表级锁的存储引擎(例如MyISAM.Aria(MariaDB对MyISAM引擎的改进,前身是MyISAM))在读(select).写操作(insert.delete.u ...

  4. MySQL数据库MyISAM存储引擎转为Innodb

    MySQL数据库MyISAM存储引擎转为Innodb  之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...

  5. mysql的innodb存储引擎和myisam存储引擎的区别

    主要区别如下: 1.事务支持.innodb支持事务,事务(commit).回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transacti ...

  6. [MySQL Reference Manual]15. 其他存储引擎

    15. 其他存储引擎 15. 其他存储引擎 15.1 设置存储引擎 15.2 MyISAM存储引擎 15.2.1 MyISAM启动选项 15.2.2 Key的空间要求 15.2.3 MyISAM表存储 ...

  7. MySQL 远程连接(federated存储引擎)

    标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...

  8. MySQL学习笔记七:存储引擎

    1.MySQL存储引擎的设计采用“插件式”方案,用户可以很方便地选择使用哪种存储引擎,想使用mysql没有提供的引擎时,可以自己安装进去. 查看支持的存储引擎 mysql> show engin ...

  9. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

随机推荐

  1. 树莓派.使用Node.js控制GPIO

    树莓派上的40个GPIO是最好玩的东西 它们可以被C,/C++, Python, Java等语言直接控制 现在就来看看怎么用Node.js做到同样的事情 在试验之前, 请先安装好Node.js, 具体 ...

  2. PHP基础入门详解(一)【世界上最好用的编程语言】

       简介 --------- PHP(超文本预处器)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Ja ...

  3. 《mysql必知必会》读书笔记--安全管理及数据库维护

    安全管理 mysql自带的mysql数据库中的user表可查看用户所有资料 创建用户帐号 CREATE USER ben IDENTIFIED BY 'p@$$wOrd' 重命名用户帐号 RENAME ...

  4. 负载均衡集群企业级应用实战—LVS

    一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...

  5. Java中方法的重载和重置(覆盖)的区别

    简单来说,重载就是在同一类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可,而重置(覆盖)是子类重新定义父类中己经定义的方法,即子类重写父类方法. 方法的重载 方法的重载就是在同 ...

  6. XMLHttpRequest2 异步 ajax

    XMLHttpRequest1只是对已经存在的xhr对象细节进行规范定义, XMLHttpRequest2升级了该对象.   FormData 类型可以用在xhr传输的时候,把表单序列化或者将数据以表 ...

  7. Java多线程Lock

    JDK5以后为代码的同步提供了更加灵活的Lock+Condition模式,并且一个Lock可以绑定多个Condition对象 1.把原来的使用synchronized修饰或者封装的代码块用lock.l ...

  8. React + Node 单页应用「二」OAuth 2.0 授权认证 & GitHub 授权实践

    关于项目 项目地址 预览地址 记录最近做的一个 demo,前端使用 React,用 React Router 实现前端路由,Koa 2 搭建 API Server, 最后通过 Nginx 做请求转发. ...

  9. VMware14.0.0 版本虚拟机安装Ubuntu16.04 LTS版本Linux系统(多图详细步骤)

    一.前期准备工作 1.成功安装完成VMware14软件: 2.去Ubuntu官网下载Ubuntu16.0.4 LTS 版本的镜像文件. 二.安装步骤 1.打开VMware软件,选择<创建虚拟机& ...

  10. C#删除区域实现透明

    最近在搞一个图形图像的项目.不知道经理为什么选择了C#语言,但还是要做,呵呵. 在期间出现一个比较难解决的问题如下: 删除当前图层的指定区域用来显示下面图层在这个区域的图像,相当于PS蒙版层的效果. ...