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数据表经常被锁的情况,直接导 ...
随机推荐
- python并发编程&IO模型
一 IO模型介绍 为了更好地了解IO模型,可先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(n ...
- 如何安装secureCRT8.1破解
安装地址 网盘: https://pan.baidu.com/s/1iGxi6BTCMC_jewCwcUHhgA 密码: u6jq 安装教程 1.点击安装 2.全部默认即可,安装完成之后再桌面上右击该 ...
- 我的Android进阶之旅------>Android中如何高效率的进行简繁体转换
因为APP要做国际化适配,所以就需要顾及到香港和台湾都是使用繁体字,怎样快速便捷高效的把简体字转换成繁体字呢? 说实话我之前用的方法比较呆板,把每个需要转换的字符串进行在线翻译.今天突然发现word或 ...
- 【Java工程师之路】[1-2.2]Java10个面向对象设计原则
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator ...
- (转)js原生自定义事件的触发dispatchEvent
1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: 1 2 3 d ...
- seaborn(matplotlib)画图,linux系统中文乱码等问题解决
data = pd.read_json(json.dumps(issue_dpl)) # set pic size plt.figure(figsize=(13, 5)) sns.set_style( ...
- 由于Redis漏洞导致服务器被黑
原文地址 漏洞描述 Redis默认情况下,会绑定在0.0.0.0:6379,这样将会将Redis服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Re ...
- golang模板语法简明教程(后面有福利哦)
template是go 语言web开发中必不可少的,特此记录下来: [模板标签] 模板标签用"{{"和"}}"括起来 [注释] {{/* a comment ...
- 使用Compute Engine工具连接Linux VM
Links: Connecting to Linux Instances 内容: 要连接Linux VM实例,必须要有一个SSH(Secure Shell)秘钥.无论何时连接一个LinuxVM实例(通 ...
- django-admin 修改admin自带模版
还不知道怎么指定修改每个页面,我就把把所有修改写在一个页面,通过url进行判断是否是是否显示修改内容,修改的是change_form.html ,在admin里面可以找到 {% block objec ...