言:

  之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解;

差异:

  MyISAM 只支持表锁,不支持事务,表损坏率较高。较老的存储引擎。

       它分为2种类型的文件:以 MYD 作为后缀名的数据文件和以 MYI 作为后缀名的索引文件。
       MyISAM 读写并发不如 InnoDB,适用于INSERT较多的场景,且支持直接复制文件,用以备份数据,
       是 MySQL 公司开发的,物理文件主要有数据文件,日志文件和索引文件,并且这三个文件是单独存在。

 
       InnoDB 支持行锁,支持事务,支持行级锁,Crash(崩溃)后具有 Revcover(还原)机制,
       只有 ibd 文件,分为数据区和索引区,有较好的读写并发能力,但做 COUNT 运算时相当消耗CPU,
       是 InnoDB 公司开发的。物理文件有日志文件,数据文件和索引文件。
       其中,索引文件和数据文件是放在一个目录下,可以设置共享文件、独享文件两种格式。
  

PS:help_topic MyISAM 表、innerdb InnoDB 表;

 

MyISAM

InnoDB

构成上的区别

每个MyISAM在磁盘上存储成三个文件。

每一个文件的名字就是表的名字,文件名都和表名相同,

扩展名指出文件类型。

表定义的扩展名为.frm(frame,存储表定义);

数据文件的扩展名为.MYD(MYData,存储数据);

索引文件的扩展名是.MYI(MYIndex,存储索引);

数据文件和索引文件可以放置在不同的目录下,

平均分布I/O,获得更快的速度。

只有ibd文件,分为数据区和索引区,有较好的读写并发能力。

物理文件有:日志文件、数据文件和索引文件。

其中,索引文件和数据文件是放在一个目录下,可以设置共享文件与独享文件两种格式。

基于磁盘的资源是 InnoDB 表空间数据文件和它的日志文件,

InnoDB 表的大小只受限于操作系统文件的大小,一般为2GB(单个文件)。

InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。

但是对比 MyISAM 的存储引擎,InnoDB 写的处理效率差一些,

并且会占用更多的磁盘空间以保留数据和索引。

事务处理上方面

MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,

但是不提供事务支持。

InnoDB提供事务支持事务、外键等高级数据库功能。

SELECT
UPDATE
INSERT
DELETE

如果执行大量的 SELECT,那么 MyISAM 是更好的选择。

(1)如果执行大量的INSERT或UPDATE,那么出于性能方面的考虑,应该使用InnoDB表。

(2)当执行DELETE FROM table时,InnoDB不会重建表,而是一行一行地删除。

(3)LOAD TABLE FROM MASTER 操作对 InnoDB 是不起作用的,

  解决方法是首先把 InnoDB 表改成 MyISAM 表,导入数据后再改成 InnoDB 表,

  但是对于使用的额外的 InnoDB 特性(例如外键)的表不适用。

清空表

MyISAM 会重建表。

InnoDB 是一行一行地删除,效率非常慢。

对AUTO_INCREMENT列的操作

MyISAM 为 INSERT 和 UPDATE 操作自动更新这一列。

AUTO_INCREMENT 值可用 ALTER TABLE 来重置。

对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其它字段一起建立联合索引。

如果为一个表指定AUTO_INCREMENT列,

那么在数据字典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,

它被用在为该列赋新值,自动增长计数器仅被存储在主内存中,而不是存在磁盘上。

InnoDB中必须包含只有该字段的索引。

表的行数

当执行SQL语句“SELECT COUNT(*) FROM TABLE”时,

MyISAM只是简单地读出保存好的行数,需要注意的是,

当COUNT(*)语句包含WHERE条件时,

MyISAM和InnoDB的操作是一样的。

InnoDB中不保存表的具体行数,也就是说,

当执行SELECT COUNT(*) FROM TABLE时,InnoDB要扫描一遍整个表来计算行数。

表级锁定(更新时锁定整个表):其锁定机制是表级索引,

这虽然可以让锁定的实现成本很小,但是也同时大大降低了其并发性能。

不支持行级锁,只支持并发插入的表锁,主要用于高负载的SELECT。

提供行级锁(locking on row level),

提供与 Oracle 类型一致的不加锁读取(non-locking read),

另外,InnoDB 表的行锁也不是绝对的,

如果在执行一个 SQL 语句时 MySQL 不能确定要扫描的范围,

那么 InnoDB 表同样会锁全表,

例如 UPDATE TABLE T_TEST_LHR SET NUM=1 WHERE NAME LIKE "%LHR%"。

MySQL InnoDB与MyISAM存储引擎差异的更多相关文章

  1. InnoDB和MyISAM存储引擎的区别

    在MySQL数据库的使用过程中我们经常会听到存储引擎这个名词.MySQL的存储引擎有好多种如InnoDB.MyISAM.Memory.NDB等等,多存储引擎也是MySQL数据库的特色. InnoDB和 ...

  2. innodb和myisam存储引擎插入速度

    --innodb和myisam存储引擎插入速度 ------------------------------------2014/05/21 MySQL 5.6 全部默认设置,插入数据9999条,性能 ...

  3. 第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介

    环境说明 mysql版本:Percona-Server-5.6.30 IP:10.7.15.167 端口:3306 安装目录:/httx/run/mysql 数据目录:/httx/run/mysql/ ...

  4. 【MySQL】MySQL(四)存储引擎、索引、锁、集群

    MySQL存储引擎 MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连接,例如C.Java.P ...

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

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

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

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

  7. mysql修改表的存储引擎(myisam<=>innodb)【转】

    修改表的存储引擎myisam<=>innodb 查看表的存储引擎mysql> show create table tt7;+-------+--------------------- ...

  8. [转帖]一文看懂mysql数据库本质及存储引擎innodb+myisam

    一文看懂mysql数据库本质及存储引擎innodb+myisam https://www.toutiao.com/i6740201316745740807/ 原创 波波说运维 2019-09-29 0 ...

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

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

随机推荐

  1. Redis3.2.5配置主从服务器遇到的一些错误

    注意:关闭主从服务器的防火墙 问题一: WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net ...

  2. okhttp 防止自动删除url中的./和../

    测试任意文件读取漏洞是需要在url中加上 ../../ 之类的字符,但是如果使用三方库Apache httpclient或okhttp,他们都会自动删除url中的  ../ ,通过修改okhttp的源 ...

  3. Linux学习笔记(1)linux的开关机及重启

    linux的启动流程 一.启动 (1)电源 开关   (2)选择启动方式:FLOPPY/BIOS/CDROM(软盘/bios启动/光盘) 基于MBR引导方式 [1]MBR:最多只能划分4个主分区,逻辑 ...

  4. mysql数据库补充知识1 安装数据库破解数据库密码已经创建用户

    一.安装MYSQL数据库 1.yum安装 #二进制rpm包安装 yum -y install mysql-server mysql 2.源码安装   1.解压tar包 cd /software tar ...

  5. Nginx -HTTP和反向代理服务器简单配置

    from:http://blog.sina.com.cn/s/blog_6b64b6a701011feh.html Nginx官方测试能够支持5万并发连接,实际生产环境中可支持2-4万并发连接数. 在 ...

  6. jQuery:自学笔记(2)——jQuery选择器

    jQuery:自学笔记(2)——jQuery选择器 基本选择器 说明 jQuery的基本选择器与CSS的选择器相似: 实例 标签选择器 //使用标签选择器更改字体大小 $(div).css('font ...

  7. CSS素材+特效

    1.字体:https://www.zhihu.com/question/19680724 2.loading特效:http://www.cnblogs.com/lhb25/archive/2013/1 ...

  8. pyhton3 random模块

    random是内建(built-in)函数,作用是产生随机数 导入模块: import random 接着就可以调用random模块下的函数了使用 dir(random)可以查看random模块下有哪 ...

  9. 【Topcoder】SRM157 DIV2总结

    250分题:简单的二分,就是平常玩的猜数字游戏 代码:GitHub 500分题:给出一个员工一天的打卡时间段,要求求出员工这一天的工资.其中正常上班时间是6:00:00到18:00:00,薪水是wag ...

  10. Hearbeat 工作原理

    Hearbeat 原理 heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路, ...