存储引擎是什么?
概况下,就是往数据库中存储,获取数据的一套相关功能集合,包括存储,索引,锁定等技术。
为了提高数据库查询性能,我们会给表字段加索引,索引又是又是由存储引擎实现的,所以学习下MySQL中的常用的存储引擎是很有必要的。MySQL中常用的存储引擎由MyISAM和InnoDB两种存储引擎。
1.MyISAM存储引擎
1.1 MySQL5.5之前默认的存储引擎。具有一下特点:
a. myisam只支持表级锁,用户在操作myisam表时,CRUD语句都会给表自动加锁.
b. 不支持事务
c. 允许表没有主键
d. 适合于频繁查询的表,且查询性能很高。
1.2 MySQL中B+Tree索引的体现形式如下图,索引和数据行数据分开存储在一个.MYI和一个.MYD的文中。无论是主键上建立的索引,还是主键外的辅助索引,索引过程均为下图:在.MYI文件中根据索引找到地址引用,再去磁盘上.MYD文件读取对应位置的数据。
2 InnoDB引擎
InnoDB以主键为索引来组织数据的存储。数据库表行中的数据的物理顺序与键值的逻辑顺序(索引)相同,这也就是聚簇索引。如果没有显式指定主键索引,InnoDB会隐式创建一个主键索引。
2.1 InnoDB特点:
a. 支持行级锁,表级锁,支持事务。
b. 要求表要有主键,未显式建立主键,InnoDB会隐式建立主键。
c. 适合于插入更新比较频繁的表,查询性能低于MyISAM引擎。
d.聚簇索引方式存储
e.支持并发场景下的MVCC多版本控制
2.2 InnoDB主键索引
InnoDB存储引擎会将数据和索引一起存在一个.IBD文件中。主键索引过程如下:
2.2InnoDB辅助索引
InnoDB辅助索引要借助主键索引,加入我们在id上建立了主键索引,在name字段上建立了辅助索引,那么通过name字段的辅助索引过程如下:1.先通过辅助索引定位到主键索引 2.通过主键索引定位到数据行。
1.InnoDB设计主键索引的初衷可能是觉得主键是最常用到的。
2.辅助索引是通过主键索引二次定位记录,而非直接指向数据行地址,这样可以避免数据改动后需要维护地址引用。
3.其他存储引擎
MySQL中除以上两种最常用的村粗引擎外,还有一些别的可用存储引擎,简单看下。
3.1 MEMORY存储引擎
memory存储引擎使用存储在内存中的内容来创建表,因为基于内存,所以速度极快,memory存储引擎默认使用hash索引。
应用场景:临时表
3.2 CSV存储引擎
以 .CSV格式存储文件,适用于文件的快速导入导出。
应用场景:两张表数据交换的中间载体,日志收集分析。
3.3 Archive 存储引擎
Archive存储引擎只允许查询和新增,不允许修改。
应用场景:门户网站,新闻类网站。