
一、MySQL经常运用存储引擎及特性
1、InnoDB存储引擎
从MySQL5.5版本以后,MySQL的默许内置存储引擎已经是InnoDB了,他的主要特性有:
(1)灾害恢复性比较好;
(2)支撑事件。默许的事件断绝级别为可反复度,经由历程MVCC(并发版本掌握)来完成的。
(3)运用的锁粒度为行级锁,能够支撑更高的并发;
(4)支撑外键;
(5)合营一些热备东西能够支撑在线热备份;
(6)在InnoDB中存在着缓冲治理,经由历程缓冲池,将索引和数据悉数缓存起来,加速查询的速率;
(7)关于InnoDB范例的表,其数据的物理构造形式是聚簇表。一切的数据根据主键来构造。数据和索引放在一块,都位于B+数的叶子节点上;
2、MyISAM存储引擎
在5.5版本之前,MyISAM是MySQL的默许存储引擎,该存储引擎并发性差,不支撑事件,所以运用场景比较少,主要特性为:
(1)不支撑事件;
(2)不支撑外键,假如强行增添外键,不会提醒毛病,只是外键不其作用;
(3)对数据的查询缓存只会缓存索引,不会像InnoDB一样缓存数据,而且是应用操纵系统自身的缓存;
(4)默许的锁粒度为表级锁,所以并发度很差,加锁快,锁争执较少,所以不太轻易发生死锁;
(5)支撑全文索引(MySQL5.6以后,InnoDB存储引擎也对全文索引做了支撑),然则MySQL的全文索引基础不会运用,关于全文索引,如今有其他成熟的解决方案,比方:ElasticSearch,Solr,Sphinx等。
(6)数据库地点主机假如宕机,MyISAM的数据文件轻易破坏,而且难恢复;
3、MEMORY存储引擎
将数据存在内存中,和市场上的Redis,memcached等头脑相似,为了进步数据的接见速率,主要特性:
(1)支撑的数据范例有限定,比方:不支撑TEXT和BLOB范例,关于字符串范例的数据,只支撑牢固长度的行,VARCHAR会被自动存储为CHAR范例;
(2)支撑的锁粒度为表级锁。所以,在接见量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;
(3)由于数据是存放在内存中,所以在服务器重启以后,一切数据都邑丧失;
(4)查询的时刻,假如有用到暂时表,而且暂时表中有BLOB,TEXT范例的字段,那末这个暂时表就会转化为MyISAM范例的表,机能会急剧下降;
4、ARCHIVE存储引擎
ARCHIVE存储引擎适宜的场景有限,由于其支撑紧缩,故主如果用来做日记,流水等数据的归档,主要特性:
(1)支撑Zlib紧缩,数据在插进去表之前,会先被紧缩;
(2)仅支撑SELECT和INSERT操纵,存入的数据就只能查询,不能做修正和删除;
(3)只支撑自增键上的索引,不支撑其他索引;
5、CSV存储引擎
数据中转试用,主要特性:
(1)其数据花样为.csv花样的文本,能够直接编辑保留;
(2)导入导出比较轻易,能够将某个表中的数据直接导出为csv,试用Excel办公软件翻开;
二、InnoDB和MyISAM的对照
1、由于锁粒度的差别,InnoDB比MyISAM支撑更高的并发;
2、InnoDB为行级锁,MyISAM为表级锁,所以InnoDB相干于MyISAM来讲,更轻易发生死锁,锁争执的几率更大,而且上锁的开支也更大,由于须要为每一行加锁;
3、在备份容灾上,InnoDB支撑在线热备,有很成熟的在线热备解决方案;
4、查询机能上,MyISAM的查询效力高于InnoDB,由于InnoDB在查询历程当中,是须要保护数据缓存,而且查询历程是先定位到行地点的数据块,然后在从数据块中定位到要查找的行;而MyISAM能够直接定位到数据地点的内存地址,能够直接找到数据;
5、SELECT COUNT(*)语句,假如行数在万万级别以上,MyISAM能够疾速查出,而InnoDB查询的迥殊慢,由于MyISAM将行数零丁存储了,而InnoDB须要朱行去统计行数;所以假如运用InnoDB,而且须要查询行数,则须要对行数举行特别处置惩罚,如:离线查询并缓存;
6、MyISAM的表构造文件包含:.frm(表构造定义),.MYI(索引),.MYD(数据);而InnoDB的表数据文件为:.ibd和.frm(表构造定义);
三、怎样挑选适宜的存储引擎
1、运用场景是不是须要事件支撑;
2、是不是须要支撑高并发,InnoDB的并发度远高于MyISAM;
3、是不是须要支撑外键;
4、是不是须要支撑在线热备;
5、高效缓冲数据,InnoDB对数据和索引都做了缓冲,而MyISAM只缓冲了索引;
6、索引,差别存储引擎的索引并不太一样;
更多MySQL相干技术文章,请接见MySQL教程栏目举行进修!
以上就是MySQL存储引擎详解的细致内容,更多请关注ki4网别的相干文章!