言:

  之前简单介绍过 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. Hash表的C++实现(转)

    原文:Hash表(C++实现) 哈希表的几个概念: 映像:由哈希函数得到的哈希表是一个映像. 冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突. 处理冲突的几个方法: 1.开放地址法:用开放地址 ...

  2. nodejs get请求

    const http = require('http'); http.get('http://192.168.1.6:8080/getDemo?msg=12', (res) => { const ...

  3. spring 编译时抱错纪录class path resource [spring/] cannot be resolved to URL because it does not exist

    class path resource [spring/] cannot be resolved to URL because it does not exist; 在 pom.xml 里添加如下代码 ...

  4. hadoop学习第二天-了解HDFS的基本概念&&分布式集群的搭建&&HDFS基本命令的使用

    一.HDFS的相关基本概念 1.数据块 1.在HDFS中,文件诶切分成固定大小的数据块,默认大小为64MB(hadoop2.x以后是128M),也可以自己配置. 2.为何数据块如此大,因为数据传输时间 ...

  5. 安卓手机开机键失灵,FASTBOOT模式ADB重启

    安装ADB工具 CMD指令fastboot reboot

  6. OSI参考模型与排错

    OSI参考模型中底层为其上层服务,因此排除网络故障应该也从底层到高层依次排查. 首先检查网络连接是否正常(物理层检查).例如网卡没有接好网线,将会看到带红叉的本地连接,属于物理层故障. 连接好网卡后, ...

  7. open函数and文件处理

    一 介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,应用程序是无法操作 ...

  8. redis的安装配置(转)

    一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...

  9. iOS git 托管代码 常用几个操作

    学习 git 切换分支 1  从远程下载一个分支develop(本地没有的) (1) git fetch origin develop (2) git checkout develop (默认 分支切 ...

  10. java FileUtils 文件工具类

    package com.sicdt.library.core.utils; import java.io.BufferedInputStream; import java.io.File; impor ...