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的区别的更多相关文章

  1. mysql中innodb和myisam的区别

    InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了 1.事务和外键 InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版 ...

  2. mysql中InnoDB与MyISAM的区别

    两者的区别: 1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成 ...

  3. mysql存储引擎中InnoDB与Myisam的区别及应用场景

    1. 区别: (1)事务处理: MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等高级处理): (2)锁机制不同: MyISAM是表级锁,而InnoDB是行级锁: (3)sel ...

  4. Mysql存储引擎中InnoDB与Myisam的区别

    1. 事务处理innodb 支持事务功能,myisam 不支持.Myisam 的执行速度更快,性能更好. 2. select ,update ,insert ,delete 操作MyISAM:如果执行 ...

  5. InnoDB与MyISAM引擎区别

    mysql中InnoDB与MyISAM两种数据库引擎的区别: 一.InnoDB引擎: 1.支持事务性, 2.支持外部键, 3.行级锁, 4.不保存表的具体行数,执行select count(*) fr ...

  6. InnoDB和MyISAM的区别与选择

    MyISAM 性能(适合小项目,读快速)MyISAM 是MySQL中默认的存储引擎,比如适合新闻系统,读为主.InnoDB 事务或外键支持(适合大项目,高并发读写)活跃用户20多万时候,也能很轻松应付 ...

  7. Mysql数据库中InnoDB和MyISAM的差别

    Mysql数据库中InnoDB和MyISAM的差别 InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理, ...

  8. MySQL之innodb和myisam的区别

    innodb和myisam的区别: MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存储表定义, 数据文件的扩展名为.MYD, 索引文件的扩展名是 ...

  9. SQL中ON和WHERE的区别

    SQL中ON和WHERE的区别 - 邃蓝星空 - 博客园 https://www.cnblogs.com/guanshan/articles/guan062.html

随机推荐

  1. hdu 5514 Frogs(容斥)

    Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. 习题9-5 UVA 242

    Stamps and Enovelope Size 题意: 给你最多贴S张邮票.有N个邮票集合,每个集合有不同的面值.问哪个集合的最大连续邮资最大,输出最大连续邮资和集合元素. 如果不止一个集合结果相 ...

  3. 关于jsp中的文件下载

    第一种采用转发的方式: package cn.jbit.download.servlet; import java.io.IOException; import javax.servlet.Reque ...

  4. TCP/UDP的区别

    TCP与UDP区别 TCP提供的是面向连接的.可靠的数据流传输: UDP提供的是非面向连接的.不可靠的数据流传输. TCP提供可靠的服务,通过TCP连接传送的数据,无差错.不丢失,不重复,按序到达:U ...

  5. gulp填坑记(一)

    gulp是基于Node.js的自动任务运行器.可以自动完成html.image.css和js等文件的检测.检查.合并.压缩.格式化等,并监听文件在改动后重复指定的这些步骤. 一.首先,我全局安装了gu ...

  6. Java 反射详解 转载

    java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...

  7. JVM常见问题 一(转载)

    1. 内存模型以及分区 JVM内存模型如下图所示: 此处我们集中注意中间绿色的部分,该部分为JVM的运行时内存,该部分包含了: 线程私有的(灰色): 程序计数器:记录执行到第几条指令 虚拟机方法栈:执 ...

  8. JavaScript判断不同平台

    function getPlatformType() { let UA = navigator.userAgent; if(/MicroMessenger/i.test(UA)){ return 'w ...

  9. SUSE11虚拟机安装与Oracle 11g安装

    SUSE11虚拟机安装与Oracle 11g安装 本文中所需所有参数均位于文末附录中 新建虚拟机,选择SUSE11 64位 启动虚拟机后,选择第二项安装 选择语言 跳过CD检查 选择全新安装 选择默认 ...

  10. PHP使用prepare(),insert数据时要注意的一点!!!

    今天看了PHP防SQL注入,使用预处理prepare,但是我insert数据时,总是插不进去,但是select却可以,弄了很久终于知道原来问题在这里,先上代码 <?php header('con ...