谈谈数据库中MyISAM与InnoDB区别

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。 MyISAM表格可以被压缩,而且它们支持全文搜索。它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。

MyIASM是IASM表的新版本,有如下扩展:

  • 二进制层次的可移植性。
  • NULL列索引。
  • 对变长行比ISAM表有更少的碎片。
  • 支持大文件。
  • 更好的索引压缩。
  • 更好的键吗统计分布。
  • 更好和更快的auto_increment处理。

InnoDB:这种类型是事务安全的。它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快,具有比BDB还丰富的特性, 因此如果需要一个事务安全的存储引擎,建议使用它。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。对于支持事物的InnoDB类型的表,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。

InnoDB不支持FULLTEXT类型的索引。以下是一些细节和具体实现的差别:

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

综上所述,任何一种表都不是万能的,只有恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

我的理解:

是否支持事务的区别,

innodb用于insert和update较多的情况

myisam用于select较多的情况

myisam用于小数据,小并发  innodb用于大数据,大并发

时间: 2024-11-08 22:07:42

谈谈数据库中MyISAM与InnoDB区别的相关文章

谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表

MyISAM:这个是默认类型,它是基于传统的ISAM类型, ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法. 与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键.如果事物回滚将造成不完全回滚,不具有原子性.如果执行大量的SELECT,MyISAM是更好的选择. MyIASM是IASM表的新版本,有如下扩展

MySQL 数据库中MyISAM 和 InnoDB 的区别

首先要明白,在MySQL数据库忠中的存储引擎是基于表的,而不是基于数据库的. 讲述两者区别: InnoDB 存储引擎,主要面向 OLTP(Online Transaction Processing,在线事务处理)方面的应用,是第一个完整支持 ACID 事务的存储引擎(BDB 第一个支持事务的存储引擎,已经停止开发). 特点: 行锁设计.支持外键: 支持类似于 Oracle 风格的一致性非锁定读(默认情况下读取操作不会产生锁): InnoDB 将数据放在一个逻辑的表空间中,由 InnoDB 自身进

常用mysql数据库引擎——MyISAM和InnoDB区别

背景: 昨天做项目时,发现使用事务后回滚不了,后来把数据库引擎从MyISAM换成InnoDB后果断好了,如下图: 正文: MyISAM和InnoDB是mysql常用的数据库引擎,他们的区别如下: 数据库引擎 适用范围 性能 事务 外键 数据受损恢复 MyISAM 适合频繁查询 高 × × × InnoDB 适合频繁修改 中 √ √ √ 注:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎 参考资料: MySQL数据库引擎介绍.区别.创建和性能测试的深入分析 http://www.jb

简述在MySQL数据库中MyISAM和InnoDB的区别

区别主要有以下几点: (1)构成上,MyISAM的表在磁盘中有三个文件组成,分别是表定义文件(.frm).数据文件(.MYD).索引文件(.MYI),而InnoDB的表由表定义文件(.frm).表空间数据和日志文件组成. (2)安全方面,MYISAM强调的是性能,其查询查询效率较高,但不支持事务和外键等安全性方面的功能,而InnoDB支持事务和外键等高级功能,查询效率稍低. (3)对锁的支持,MyISAM支持表锁,而InnoDB支持行锁.

mysql数据库引擎 MyISAM和 InnoDB区别

1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件的扩展名是.MYI (MYIndex). InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB. 2. 存储空间 MyISAM:可被压缩,存储空间较小.支持三种不同的存储格式:静态表(默认,但是注意数

mysql数据库引擎myisam和innodb的比较

存储引擎 myisam  innodb,最常用可以配置default-storage-engine=INNODB 配置默认引擎 myisam的这3个在一起  结构,数据,索引(一个表由这3个组成) Engine myisamEngine innodb区别:1.保存文件的方式不同myisam: xxx.frm  结构        xxx.myd  数据    xxx.myi  索引innodb:一个表一个文件        xxx.frm   结构    所以的innodb表,都使用相同的inn

【转】MySQL存储引擎中的MyISAM和InnoDB区别详解

转自:http://www.jb51.net/article/62457.htm MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点:不支持事务处理(transaction).不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM. InnoDB,是MySQL的数据

MySQL存储引擎中的MyISAM和InnoDB区别详解

MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点:不支持事务处理(transaction).不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM. InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一.InnoDB由Innob

MySQL中MyISAM和InnoDB的区别

MyISAM和InnoDB的区别 MySQL默认采用的是MyISAM. MyISAM不支持事务,而InnoDB支持.InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交. InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表.即 MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写