mysql中InnoDB和MyISAM存储引擎区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
  MyIASM是IASM表的新版本,有如下扩展:
  ·二进制层次的可移植性。
  ·NULL列索引。
  ·对变长行比ISAM表有更少的碎片。
  ·支持大文件。
  ·更好的索引压缩。
  ·更好的键吗统计分布。
  ·更好和更快的auto_increment处理。

MyISAM:

   用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。也可以通过lock table命令来锁表,这样操作主要是可以模仿事务,但是消耗非常大,一般只在实验演示中使用。

  以下是一些细节和具体实现的差别:
  ◆1.InnoDB不支持FULLTEXT类型的索引。
  ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
  ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
  ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
  ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
 

 另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
  综上所述,任何一种表都不是万能的,只有恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

Innodb支持事务和行级锁,是innodb的最大特色。

  事务的ACID属性:atomicity,consistent,isolation,durable。

  并发事务带来的几个问题:更新丢失,脏读,不可重复读,幻读。

  事务隔离级别:未提交读(Read uncommitted),已提交读(Read committed),可重复读(Repeatable read),可序列化(Serializable)

时间: 2024-09-24 23:08:48

mysql中InnoDB和MyISAM存储引擎区别的相关文章

MySQL数据库InnoDB和MyISAM数据引擎的差别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能. MyIASM是IASM表的新版本,有如下扩展: 1. 二进制层次的可移植性. 2. NULL列索引. 3. 对变长行比ISAM表有更少的碎片. 4. 支持大文件. 5. 更好的索引压缩

mysql 中InnoDB和MyISAM的区别分析小结_php技巧

 MyIASM是IASM表的新版本,有如下扩展: 二进制层次的可移植性. NULL列索引. 对变长行比ISAM表有更少的碎片. 支持大文件. 更好的索引压缩. 更好的键吗统计分布. 更好和更快的auto_increment处理. 以下是一些细节和具体实现的差别: 1.InnoDB不支持FULLTEXT类型的索引. 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出

Mysql存储引擎InnoDB和Myisam的六大区别

 这篇文章主要介绍了Mysql存储引擎InnoDB和Myisam的六大区别,本文从构成上.事务处理.SQL操作.自动ID.表行数等方面讲解了它的区别,需要的朋友可以参考下       MyISAM InnoDB 构成上的区别:     每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型.   .frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名是.MYI (MYIndex).   基于磁盘的资源是InnoDB表空间数据

MySQL数据库MyISAM存储引擎转为Innodb的方法_Mysql

mysql数据库存储引擎为MyISAM的时候,在大访问量的情况下数据表有可能会出现被锁的情况,这就会导致用户连接网站时超时而返回502,此时就需要MySQL数据库MyISAM存储引擎转为Innodb.步骤如下: 1.导出CentOS数据库的表结构 复制代码 代码如下: mysqldump -d -uxxx -p centos > centos_table.sql 其中-d参数表示不导出数据,只导出表结构 2.替换centos_table.sql里的MyISAM为INNODB 复制代码 代码如下:

MySQL的MyISAM存储引擎修复及修改最大文件大小

前两天生产库上出现了一个不大不小的故障,关于MySQL 的存储引擎问题. 这个故障所涉及到的是MySQL 4.1.20的版本MyISAM存储引擎,一张1千多万的表. 故障现象: 在做简单的SELECT查询的时候没有问题,但是做连接查询或者其他复杂查询的时候就报错了:具体的错误代码由于时间的问题被遗忘了.在系统日志中记录的错误如下图: 从错误信息中可以猜到了大概:存储引擎出了问题. 进到相应的数据库目录下,查看一下数据文件大小,有4G大小,这就不奇怪了. MySQL 4版本的数据库创建的表默认最大

【Mysql 学习】MyISAM存储引擎(一)。

MyISAM是默认存储引擎. 每个MyISAM在磁盘上存储成三个文件. 第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名是.MYI (MYIndex). 想要用一个MyISAM表格,可以使用如下语句: CREATE TABLE t (i INT) ENGINE = MYISAM; 一般地,ENGINE选项是不必要的:除非默认已经被改变了,MyISAM是默认存储引擎. 如下是MyISAM存储引擎的一些特征

MySQL中char和varchar有啥区别?优缺点是啥?

在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别  char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符:  varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符: 从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度.而varchar则处可变长度但他要

查看mysql当前表使用的存储引擎(转)

说明:当我们创建表 "test"表时 CREATE TABLE test ( id INT(11) default NULL auto_increment, s char(60) default NULL, PRIMARY KEY(id) ENGINE=InnoDB; 一般情况这样没任何问题.但是,如果MySQL服务器配置中未启用InnoDB存储引擎.则在创建表 test 时,MySQL还是会自动选择默认的存储引擎MyISAM来创建test表.因为通过SHOW CREATE TABLE

MySQL中Innodb的事务隔离级别和锁的关系的讲解教程_Mysql

前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力.所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在.这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么. 一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用