MySQL存储引擎

2023-10-23 09:18:39 浏览数 (1)

show engines; 查看支持的存储引擎。

mysql表的存储引擎:

InnoDB myISAM Memory MRG_MYISAM archive federated,CSV,BLACKHOLE

1、InnoDB

支持事务和外键:

InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能

全文索引 不支持

锁 InnoDB支持行级锁,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,注意间隙锁的影响

存储: InnoDB,基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小

索引: InnoDB(索引组织表)使用的聚簇索引、索引就是数据,顺序存储,因此能缓存索引,也能缓存数据

并发: InnoDB 读写阻塞与事务隔离级别相关

什么时候选择InnoDB(是建表的默认选择)?

需要事务支持(具有较好的事务特性) 行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成 数据更新较为频繁的场景 数据一致性要求较高 硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘 IO

.frm 文件存储的是数据表的表结构信息

.ibd 存储的是数据表的索引信息及数据

2、MYISAM

事务和外键: 不支持事务和外键 MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择

全文索引: 支持

锁: MyISAM支持表级锁定,提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)

存储: MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型, .frm文件存储表定义,数据文件的扩展名为.MYD, 索引文件的扩展名是.MYI

索引: MyISAM(堆组织表)使用的是非聚簇索引、索引和文件分开,随机存储,只能缓存索引

并发: MyISAM读写互相阻塞:不仅会在写入的时候阻塞读取,MyISAM还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读

场景选择?

1、不需要事务支持(不支持) 2、并发相对较低(锁定机制问题) 3、数据修改相对较少(阻塞问题),以读为主 4、数据一致性要求不是非常高

0 人点赞