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)
import random def code(n=6,alpha=True): s = '' # 创建字符串变量,存储生成的验证码 for i in range(n): # 通过for循环控制验证码位 ...
- 019-Spring Boot 日志
一.概述 spring-boot默认支持info级别的日志. 日志级别:trace.debug.info.warn.error.fatal.off[关闭] 二.配置日志级别 2.1.配置文件配置日志级 ...
- vim常用快捷键记录
yy复制一行 2yy复制2行 同理 3yy复制3行 p粘贴复制 dd删除一行 ctrl+f 翻页 ctrl+b 上翻 shift+a 跳到行尾进入insert模式 shift+i 跳到行首进入inse ...
- Loadrunner之脚本篇——事务函数
1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 lr_end_transaction(“transaction_n ...
- loadrunner之脚本篇——录制方式HTML-based和URL-based Script
A. HTML-based Script 针对 Web (HTTP/HTML)虚拟用户的缺省录制级别.它指示VuGen录制当前web页面上下文中的HTML action.录制会话期间并不录制所有资 ...
- Service degrade
服务降级:主要是针对非正常情况下的应急服务措施;比如电商平台,在针对618.双11等高峰情形下采用部分服务不出现或者延时出现的情形. 为什么是非正常情况下呢,比如我要出差,如果经常出差的话,要带的衣服 ...
- 快速查找文件——Everything
Everything Search Engine Locate files and folders by name instantly. Small installation file Clean a ...
- CentOS7在VMWare12中安装后不能上网解决办法
首先要保证你的VMWare Workstation12 在安装号CentOS7后没改动什么关于网络相关的. 1.我的电脑一开始用的是VMWare WorkStations10,发现VMnet8根本不通 ...
- css小技巧1
资料 1. 文本省略 单行省略: white-space:nowrap; overflow:hidden; text-overflow:ellipsis; 多行文本省略: 只兼容webkit内核,不属 ...
- 学好 Python 的 11 个优秀资源
Python是目前最流行.最易学最强大的编程语言之一,无论你是新手还是老鸟,无论是用于机器学习还是web开发(Pinterest就是案例),Python都是一件利器.此外,Python不但人气日益高涨 ...