MySQL InnoDB与MyISAM存储引擎差异
言:
之前简单介绍过 MySQL 常用的存储引擎,今天对两个主流的存储简单分析下差异,书上没有参考的笔试题解答注解;
差异:
MyISAM 只支持表锁,不支持事务,表损坏率较高。较老的存储引擎。

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存储引擎差异的更多相关文章
- InnoDB和MyISAM存储引擎的区别
在MySQL数据库的使用过程中我们经常会听到存储引擎这个名词.MySQL的存储引擎有好多种如InnoDB.MyISAM.Memory.NDB等等,多存储引擎也是MySQL数据库的特色. InnoDB和 ...
- innodb和myisam存储引擎插入速度
--innodb和myisam存储引擎插入速度 ------------------------------------2014/05/21 MySQL 5.6 全部默认设置,插入数据9999条,性能 ...
- 第二课——解析mysqldump命令和mysqlbinlog命令+innodb和Myisam存储引擎简介
环境说明 mysql版本:Percona-Server-5.6.30 IP:10.7.15.167 端口:3306 安装目录:/httx/run/mysql 数据目录:/httx/run/mysql/ ...
- 【MySQL】MySQL(四)存储引擎、索引、锁、集群
MySQL存储引擎 MySQL体系结构 体系结构的概念 任何一套系统当中,每个部件都能起到一定的作用! MySQL的体系结构 体系结构详解 客户端连接 支持接口:支持的客户端连接,例如C.Java.P ...
- Mysql更换MyISAM存储引擎为Innodb的操作记录
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件.通过下面的命令结果可知,已经安装了innodb插件. mysql> show p ...
- mysql的innodb存储引擎和myisam存储引擎的区别
主要区别如下: 1.事务支持.innodb支持事务,事务(commit).回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transacti ...
- mysql修改表的存储引擎(myisam<=>innodb)【转】
修改表的存储引擎myisam<=>innodb 查看表的存储引擎mysql> show create table tt7;+-------+--------------------- ...
- [转帖]一文看懂mysql数据库本质及存储引擎innodb+myisam
一文看懂mysql数据库本质及存储引擎innodb+myisam https://www.toutiao.com/i6740201316745740807/ 原创 波波说运维 2019-09-29 0 ...
- MySQL数据库MyISAM存储引擎转为Innodb
MySQL数据库MyISAM存储引擎转为Innodb 之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...
随机推荐
- 我的Android进阶之旅------>(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?
作者:马忠信,作者授权早读课发表,转载请联系作者. 原文链接:http://www.jianshu.com/p/c3387bcc4f6e# 互联网早读课:http://zaodula.com/arc ...
- 我的Android进阶之旅------>Android 众多的布局属性详解
Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,希望对读者有用. 第一类:属性值为true或false android:layout_centerH ...
- locust参数化
前面用篇专门讲了requests实现接口的参数关联案例,这里直接转化成locust脚本就行了 # coding:utf-8 from locust import HttpLocust, TaskSet ...
- ssh 的用法
一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...
- 用django写个CMS系统
上一篇介绍过django自带的flatpages,能够做简单的CMS.但是对于我们的真正的工作中的使用意义并不大.还是自己动手写一个吧. 不用说,一定是先从models开始的: from django ...
- 【HTTP】WEB机器人
<HTTP权威指南>学习摘要 Web Robot的自活跃(self-animating)用户代理. Web机器人是在不需要人工干预的情况下,自动进行一系列Web事务处理的软件程序,别名“爬 ...
- Android:日常学习笔记(9)———探究广播机制
Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...
- docker多个容器连接 将 Rails 程序部署到 Docker 容器中
在docker中使用MySQL数据库 https://yq.aliyun.com/articles/583765 将 Rails 程序部署到 Docker 容器中
- 前端 初级篇(CSS)
CSS 简介 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化. 存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式的优缺点. 语法:styl ...
- 021_在Eclipse Indigo中安装插件hadoop-eclipse-plugin-1.2.1.jar,直接运行wordcount程序
1.工具介绍 Eclipse Idigo.JDK1.7-32bit.hadoop1.2.1.hadoop-eclipse-plugin-1.2.1.jar(自己网上下载) 2.插件安装步骤 1)将ha ...