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数据表经常被锁的情况,直接导 ...
随机推荐
- Redis3.2.5配置主从服务器遇到的一些错误
注意:关闭主从服务器的防火墙 问题一: WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net ...
- okhttp 防止自动删除url中的./和../
测试任意文件读取漏洞是需要在url中加上 ../../ 之类的字符,但是如果使用三方库Apache httpclient或okhttp,他们都会自动删除url中的 ../ ,通过修改okhttp的源 ...
- Linux学习笔记(1)linux的开关机及重启
linux的启动流程 一.启动 (1)电源 开关 (2)选择启动方式:FLOPPY/BIOS/CDROM(软盘/bios启动/光盘) 基于MBR引导方式 [1]MBR:最多只能划分4个主分区,逻辑 ...
- mysql数据库补充知识1 安装数据库破解数据库密码已经创建用户
一.安装MYSQL数据库 1.yum安装 #二进制rpm包安装 yum -y install mysql-server mysql 2.源码安装 1.解压tar包 cd /software tar ...
- Nginx -HTTP和反向代理服务器简单配置
from:http://blog.sina.com.cn/s/blog_6b64b6a701011feh.html Nginx官方测试能够支持5万并发连接,实际生产环境中可支持2-4万并发连接数. 在 ...
- jQuery:自学笔记(2)——jQuery选择器
jQuery:自学笔记(2)——jQuery选择器 基本选择器 说明 jQuery的基本选择器与CSS的选择器相似: 实例 标签选择器 //使用标签选择器更改字体大小 $(div).css('font ...
- CSS素材+特效
1.字体:https://www.zhihu.com/question/19680724 2.loading特效:http://www.cnblogs.com/lhb25/archive/2013/1 ...
- pyhton3 random模块
random是内建(built-in)函数,作用是产生随机数 导入模块: import random 接着就可以调用random模块下的函数了使用 dir(random)可以查看random模块下有哪 ...
- 【Topcoder】SRM157 DIV2总结
250分题:简单的二分,就是平常玩的猜数字游戏 代码:GitHub 500分题:给出一个员工一天的打卡时间段,要求求出员工这一天的工资.其中正常上班时间是6:00:00到18:00:00,薪水是wag ...
- Hearbeat 工作原理
Hearbeat 原理 heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路, ...