sql中InnoDB和MyISAM的区别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型
1,MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持等高级处理,往往被认为只适合小项目;而InnoDB类型支持事物,以及外部键和行级锁等高级数据库功能。
2,MyISAM的索引和数据分开,每个MyISAM在磁盘上存储成三个文件。第一个文件的名字为表名,扩展名为文件类型:
.frm文件存储表定义;
.MYD (MYData)文件为数据文件;
.MYI (MYIndex)为索引文件;
而InnoDB表基于磁盘空间,大小只受限于操作系统文件的大小,一般为2GB。
3.InnoDB不支持FULLTEXT类型的索引。
4.InnoDB不保存表的具体行数,如执行select count(*) from table时要扫描一遍整个表来计算有多少行,而MyISAM直接读出已保存的行数,更快。但count(*)语句中包含 where条件时,那么两种表的操作是一样的。
5.AUTO_INCREMENT类型的字段,在InnoDB中必须包含只有该字段的索引,而在MyISAM表中则可以喝其他字段一起组成联合索引。
6.DELETE FROM table语句在InnoDB中不会重新建表,而是一行一行的删除。
7.LOAD TABLE FROM MASTER操作对InnoDB表无效,解决方法是把InnoDB表先改成MyISAM表导入数据,然后再改成InnoDB表。
但这种方法对包含特定功能的innoDB表无效,如使用外键的innoDB表(Myisam不支持外键)。
8.Myisam是表锁;而InnoDB表提供行级锁(locking on row leve),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs), 但行锁不是绝对的,只是where对它主键是有效,非主键的都会锁全表的。如执行SQL的语句不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
9.MyISAM读性能比Innodb强,所select功能多而表之间结构相对简单时用myISAM;大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
10.MyISAM的索引和数据分开,索引有压缩,内存使用率高,能加载更多索引;而Innodb中索引和数据是紧密捆绑,无压缩,造成Innodb比MyISAM体积庞大不小。
11.MyISAM的insert写操作性能比Innodb好,但针对基于索引的update操作,MyISAM逊色Innodb很多,可那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。
12.对AUTO_INCREMENT的操作:
每表一个AUTO_INCREMEN列的内部处理。
MyISAM为INSERT和UPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。
AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引
更好和更快的auto_increment处理
而innoDB中为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。自动增长计数器仅被存储在主内存中,而不是存在磁盘上。
sql中InnoDB和MyISAM的区别的更多相关文章
- mysql中innodb和myisam的区别
InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了 1.事务和外键 InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版 ...
- mysql中InnoDB与MyISAM的区别
两者的区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成 ...
- mysql存储引擎中InnoDB与Myisam的区别及应用场景
1. 区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁: (3)sel ...
- Mysql存储引擎中InnoDB与Myisam的区别
1. 事务处理innodb 支持事务功能,myisam 不支持.Myisam 的执行速度更快,性能更好. 2. select ,update ,insert ,delete 操作MyISAM:如果执行 ...
- InnoDB与MyISAM引擎区别
mysql中InnoDB与MyISAM两种数据库引擎的区别: 一.InnoDB引擎: 1.支持事务性, 2.支持外部键, 3.行级锁, 4.不保存表的具体行数,执行select count(*) fr ...
- InnoDB和MyISAM的区别与选择
MyISAM 性能(适合小项目,读快速)MyISAM 是MySQL中默认的存储引擎,比如适合新闻系统,读为主.InnoDB 事务或外键支持(适合大项目,高并发读写)活跃用户20多万时候,也能很轻松应付 ...
- Mysql数据库中InnoDB和MyISAM的差别
Mysql数据库中InnoDB和MyISAM的差别 InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理, ...
- MySQL之innodb和myisam的区别
innodb和myisam的区别: MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存储表定义, 数据文件的扩展名为.MYD, 索引文件的扩展名是 ...
- SQL中ON和WHERE的区别
SQL中ON和WHERE的区别 - 邃蓝星空 - 博客园 https://www.cnblogs.com/guanshan/articles/guan062.html
随机推荐
- ●UOJ 21 缩进优化
题链: http://uoj.ac/problem/21 题解: ...技巧题吧 先看看题目让求什么: 令$F(x)=\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor +a[ ...
- [Noi2013]矩阵游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i ...
- python常用命令(持续) | Commonly used Python command list (con't)
---------------------------------------------------------------------------------------------------- ...
- 面试(二)---synchronized
一.前言 本来计划将ConcurrentHashMap和HashMap对比着来说下,奈何看的源码有点懵逼,我在思考思考,等等有个清晰的思路在搞起来,我们先来谈一下synchronized ...
- python day3_liaoxuefeng
1.Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子: names = ['Michael', 'Bob', 'Tracy'] for na ...
- 数据权限管理中心 - 基于mybatis拦截器实现
数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...
- spaCy is a library for advanced natural language processing in Python and Cython:spaCy 工业级自然语言处理工具
spaCy is a library for advanced natural language processing in Python and Cython. spaCy is built on ...
- pytorch_SRU(Simple Recurrent Unit)
导读 本文讨论了最新爆款论文(Training RNNs as Fast as CNNs)提出的LSTM变种SRU(Simple Recurrent Unit),以及基于pytorch实现了SRU,并 ...
- Maven之自定义archetype生成项目骨架
Maven之自定义archetype生成项目骨架(一) http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013
- 数据结构之堆Heap
1. 概述 堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆).它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等. 2. 堆 ...