资讯专栏INFORMATION COLUMN

MyISAM和InnoDB的比较

jk_v1 / 3006人阅读

摘要:关于与选择和是数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。适合查询以及插入为主的应用,适合频繁修改以及涉及到安全性较高的应用。

MyISAM:

不支持事务,而且也不支持外键,但是每次查询都是原子的

支持表级锁,即每次操作是对整个表加锁

一个MYISAM表有三个文件:索引文件、表结构文件(.frm文件)、数据文件(.MYD文件)

采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性

优点:查询数据相对较快,适合大量的select,可以全文索引。

缺点:不支持事务,不支持外键,并发量较小,不适合大量update

InnoDb:

支持ACID的事务,支持事务的四种隔离级别;

支持行级锁及外键约束:因此可以支持写并发;

不存储总行数;

一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制;

主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

优点:支持事务,支持外键,并发量较大,适合大量update

缺点:查询数据相对较快,不适合大量的select

MyISAM与InnoDB的比较

基本的差别为:
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

两种存储引擎的大致区别表现在:

1)InnoDB支持事务,MyISAM不支持。

2)InnoDB支持外键,MyISAM不支持.

3)从MySQL5.5.5以后,InnoDB是默认引擎.

4)从MySQL5.6版本开始,InnoDB开始支持FULLTEXT类型的索引.之前的版本不支持全文索引。

5)InnoDB中不保存表的行数,如select count(0) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(0)语句包含where条件时MyISAM也需要扫描整个表.

6)对于自增长的字段,在MyISAM表中可以和其他字段一起建立联合索引.在InnoDB中,可以创建只有该字段的索引,也可以建立联合索引,但自增键必须在最左侧

7)清空整个表(delete from )时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表. (这个区别貌似不是很重要哈)

8)InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like "%lee%".

9)MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小.

10)MyISAM缓存在内存的是索引,不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥的优势越大。

关于MyISAM与InnoDB选择:

MYISAM和INNODB是Mysql数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。INNODB会支持一些关系数据库的高级功能,如事务功能和行级锁,MYISAM不支持。MYISAM的性能更优,占用的存储空间少。所以,选择何种存储引擎,视具体应用而定:

1)如果你的应用程序一定要使用事务,毫无疑问你要选择INNODB引擎。但要注意,INNODB的行级锁是有条件的。在where条件没有使用主键时,照样会锁全表。比如DELETE FROM mytable这样的删除语句。

2)如果你的应用程序对查询性能要求较高,就要使用MYISAM了。MYISAM索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于INNODB。压缩后的索引也能节约一些磁盘空间。MYISAM拥有全文索引的功能,这可以极大地优化LIKE查询的效率。

3)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/49103.html

相关文章

  • MySQL存储引擎详解

    摘要:一常用存储引擎及特点存储引擎从版本之后,的默认内置存储引擎已经是了,他的主要特点有灾难恢复性比较好支持事务。 一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了,他的主要特点有: (1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。(3)使用的锁...

    Achilles 评论0 收藏0
  • MySQL存储引擎详解

    摘要:一常用存储引擎及特点存储引擎从版本之后,的默认内置存储引擎已经是了,他的主要特点有灾难恢复性比较好支持事务。 一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了,他的主要特点有: (1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。(3)使用的锁...

    SmallBoyO 评论0 收藏0
  • MySQL存储引擎详解

    摘要:一常用存储引擎及特点存储引擎从版本之后,的默认内置存储引擎已经是了,他的主要特点有灾难恢复性比较好支持事务。 一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了,他的主要特点有: (1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。(3)使用的锁...

    hyuan 评论0 收藏0
  • mysql 数据库引擎

    摘要:要经常备份数据是的扩展格式和缺省的数据库引擎。数据库引擎都是造就灵活性的技术的直接产品,这项技术就是。估计这个插件式数据库引擎的模型甚至能够被用来为创建本地的提供器。能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是。 数据库引擎介绍MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎...

    LeanCloud 评论0 收藏0
  • mysql数据库引擎详解

    摘要:是的扩展格式和缺省的数据库引擎。数据库引擎都是造就灵活性的技术的直接产品,这项技术就是。估计这个插件式数据库引擎的模型甚至能够被用来为创建本地的提供器。能够让你在表格这一层指定数据库引擎,所以它们有时候也指的是。 数据库引擎介绍MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、M...

    孙吉亮 评论0 收藏0

发表评论

0条评论

jk_v1

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<