MyISAM与InnoDB的区别_weixin_33721427的博客-程序员信息网

技术标签: 操作系统  数据库  

MyISAM与InnoDB的区别是什么?

1、 存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

2、 存储空间

MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

3、 可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。

4、 事务支持

MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

5、 AUTO_INCREMENT

MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。

6、 表锁差异

MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

7、 全文索引

MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。

8、 表主键

MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

9、 表的具体行数

MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

10、 CURD操作

MyISAM:如果执行大量的SELECT,INSERT MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。

11、 外键

MyISAM:不支持
InnoDB:支持
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。

转载于:https://my.oschina.net/shyl/blog/850490

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33721427/article/details/91618497

智能推荐

python3.7降级3.6_如何在windows中从Python3.7降级到3.6_weixin_39754915的博客-程序员信息网

我已经做了很多次了。我的第一个建议是使用virtual environments。这样,您就可以在任何项目需要该版本的python时使用python 3.6,在其他需要该版本的项目中使用python3.7。但是在windows上,以下是最好的步骤:1.)使用命令提示符从计算机上卸载Python3.72.)双击ProgramFiles文件夹,查看是否有任何需要删除的Python3.7文件夹。不要删除...

cdq分治入门学习 cogs 1752 Mokia nwerc 2015-2016 G 二维偏序_weixin_34315189的博客-程序员信息网

/*CDQ分治的对象是时间。即对于一个时间段[L, R],我们取mid = (L + R) / 2。分治的每层只考虑mid之前的修改对mid之后的查询的贡献,然后递归到[L,mid],(mid,R]。显然,CDQ分治是一种离线算法,我们需要将所有的修改/查询存下来,一起进行操作。同时,CDQ分治还需要满足:操作之间相互独立,即一个操作的存在不会影响到另一个操作的存在。经典入门题 ...

Java并发编程之CountDownLatch、CyclicBarrier和Semaphore _永远的VC的博客-程序员信息网

java的concurrent包为我们提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天就来介绍下这三个辅助类并进行对比: CountDownLatch的介绍和使用可见我之前的博客:http://wosyingjun.iteye.com/blog/2223933 CyclicBarrier...

android之bugly崩溃日志过滤_setcrashregularfilter_magicbaby810的博客-程序员信息网

领导定了okr,要我们把bugly崩溃率降到0.1%。android 10不让获取设备唯一标识,获取就崩溃,这个大家都知道。还有一些其他的方法,如getNeighboringCellInfo(),在android 10上调用也会崩溃还有这个友盟的optJSONObject()这个方法,看了源码,前面还判null了,进方法就成null对象了。这些第三方的方法,没办法去改。那咋办...

写给女程序员的一篇文章_jj高手的的博客-程序员信息网

本文写给广大正在做软件开发的、曾经做过软件开发的以及即将做软件开发的女同胞们。同时也希望男同胞们能够给女同胞多一些理解和包容,多一些关心和帮助,让女同胞能在软件开发的路上走的更远一点,走的更好一些。  本文有感于公司一位女程序员的离职,在她身上,我看到了当年自己的影子,也看到了很多女孩子的影子。她是公司软件开发部2年来新进的第二位女生,也是目前做开发的唯一的女孩子。她大概是3月份入职的,是个小

python保存数据_python 打开sqlite3内存数据库,操作完毕将数据保存到文件数据库..._weixin_39655085的博客-程序员信息网

#encoding=utf-8# 甄码农代码 2012 03 06# 打开sqlite3内存数据库,执行操作,将内存数据库保存到文件import sqlite3import StringIO#使用:memory:标识打开的是内存数据库con = sqlite3.connect(":memory:")cur = con.cursor()#使用executescript可以执行多个脚本cur.exec...

随便推点

Python爬虫之scrapy的概念作用和工作流程_scrapy管道的作用_不一样的花朵的博客-程序员信息网

scrapy的概念和流程学习目标:了解 scrapy的概念了解 scrapy框架的作用掌握 scrapy框架的运行流程掌握 scrapy中每个模块的作用1. scrapy的概念Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。Scrapy 使用了Twisted['twɪstɪd]异步网络框架,可以加快我们的下载速度。Scrapy文档地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0

Documentation_driver-model_device.txt_zjgsu_linux的博客-程序员信息网

Chinese translated version of Documentation/00-INDEXIf you have any comment or update to the content, please contact theoriginal document maintainer directly.  However, if you have a problemcomm

Java初级学习(转载http://www.cnblogs.com/biehongli/p/5737612.html)_weixin_30536513的博客-程序员信息网

1:初学JAVA,都知道JAVA是面向对象的编程。笔者这节开始说说类和对象。(实例仅供参考,如若复制粘贴记得修改包名和类名,避免出错)学习JAVA的快捷键,Alt+/代码补全功能,其实此快捷键启动了Eclipse代码辅助菜单,Shift+Ctrl+o快捷键导入包Ctrl+F可以快速查找API,中文版API,百度云链接:http://pan.baidu.com/s/1slQWhCL 密码:c...

android html 换行,HTML.fromHtml换行符消失_析木分野的博客-程序员信息网

I am taking Spanned Text from an EditText box and converting it to a HTML tagged string using HTML.toHtml. This works fine. I have verified that the string is correct and contains ain the appropriate ...

align_corners 的意义_梅津太郎的博客-程序员信息网

上采样层 (upsample layer),是语义分割等密集输出 (dense prediction) 任务的必备组件。一般默认选择双线性插值 (bilinear) 或者最近邻 (nearest) 的方式。这两种方式在 pytorch 的 interpolate 函数中均有实现。关于它们如何实现,已有好多博客解读。但是 bilinear 情况下,会伴随一个选项 align_corners,默认为 False。关于这个选项的含义,pytorch 1.3.1 官网是如下解释的:这个解释看起来令人似懂非懂。.

22-08-02 西安 尚医通(02)Vscode、ES6、nodejs、npm、Bable转码器、js模块化、webpack_vscode执行 bom核心_£小羽毛的博客-程序员信息网

11、let声明变量 作用域+重复定义2、const常量 只读+初始化3、解构赋值 数组或对象中的值拆出来,赋值给变量4、模板字符串1、可以当做普通字符串来用2、多行字符串3、在字符串中嵌入变量和表达式。以前是用+拼接4、调用函数5、声明对象简写6、定义方法简写7、对象扩展运算符8、箭头函数。.............................................

推荐文章

热门文章

相关标签