概述
MySql存储引擎
- 导读
- InnoDB存储引擎
- 一、存储结构
- 二、存储空间消耗
- 三、对事务支持情况
- 四、对锁支持
- 五、表行数
- MyISAM存储引擎
- 一、存储结构
- 二、存储空间消耗
- 三、对事务支持情况
- 四、对锁支持
- 五、表行数
- 为什么MyISAM会比Innodb 的查询速度快
- 应用场景选择
导读
MySQL支持的存储引擎很多,其中包括MyISAM、InnoDB、MERGE、EXAMPLE、BDB、ARCHIVE、MEMORY、NDB Cluster等,其中InnoDB和BDB支持事务安全。同时MySql还支持一些第三方的存储引擎,例如TokuDB(高写性能高压缩存储引擎)、Infobright(列式存储引擎)。本文主要讲InnoDB和MyISAM这两个普遍使用的存储引擎之间差异,选择场景。
InnoDB存储引擎
InnoDB是MySQL最常用的数据库引擎,是MySQL AB发布binary的标准之一。InnoDB存储引擎由Innobase Oy公司所开发,在2006年五月时被甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
一、存储结构
所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),.frm文件同样存储为表结构文件,.ibd文件存储的是数据和索引文件,InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
InnoDB支持聚簇索引和非聚簇索引
二、存储空间消耗
InnoDB会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
三、对事务支持情况
拥有外键和事务支持,还具有事务提交(commit)、回滚(rollback)和崩溃修复能力(crach recovery capabilities)等这些事务安全(transaction-safe ACID compliant)型表。
InnoDB中必须包含主键索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
四、对锁支持
InnoDB存储引擎支持表锁,行锁,行锁可以大幅度提高用户并发操作。对于 InnoDB 引擎来说,读锁和写锁可以加在表上,也可以加在行上。
对于并发读和并发写的问题,可以通过实现一个由两种类型的锁组成的锁系统来解决。这两种类型的锁通常被称为 共享锁(Shared Lock,S Lock) 和 排他锁(Exclusive Lock,X Lock),也叫 读锁(readlock) 和 写锁(write lock):
共享锁 / 读锁:允许事务读(select)数据
排他锁 / 写锁:允许事务删除(delete)或更新(update)数据
InnoDB 存储引擎的行级锁是基于索引的,也就是说当索引失效或者说根本没有用索引的时候,行锁就会升级成表锁。
五、表行数
没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
MyISAM存储引擎
MyISAM是MySQL(5.5版之前)的默认数据库引擎,由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)改良。虽然查询性能优良,但有个缺点:不支持事务(transaction)。所以最近几年逐渐引入了InnoDB(另一种数据库引擎),后来就逐渐取代MyISAM。
一、存储结构
每个MyISAM在磁盘上存储成三个文件,它们以表的名字开头来命名。.frm文件存储表定义。.MYD(MYD)存储数据文件。.MYI(MYIndex)存储索引文件。
MyISAM只支持非聚簇索引
二、存储空间消耗
MyISAM存储空间是可被压缩,存储空间占用较小。MyISAM支持三种存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
三、对事务支持情况
MyISAM强调的是性能,每次查询具有原子性,其执行速度比Innodb类型更快,但是不提供事务支持。
可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
四、对锁支持
只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
五、表行数
保存有表的总行数,如果select count(*) from table;会直接取出出该值。
为什么MyISAM会比Innodb 的查询速度快
INNODB在做查询的时候,要维护的东西比MYISAM引擎多
1)INNODB要缓存数据块,MYISAM只缓存索引块, 这中间还有换进换出的减少;
2)innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快
3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护
应用场景选择
MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。
最后
以上就是还单身鞋子为你收集整理的MySql------存储引擎(InnoDB,ISAM)导读InnoDB存储引擎MyISAM存储引擎为什么MyISAM会比Innodb 的查询速度快的全部内容,希望文章能够帮你解决MySql------存储引擎(InnoDB,ISAM)导读InnoDB存储引擎MyISAM存储引擎为什么MyISAM会比Innodb 的查询速度快所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复