数据库引擎
2023年8月12日大约 2 分钟
数据库引擎
引擎是是什么
数据库引擎是数据库底层软件组织,数据库管理系统通过使用数据引擎进行创建、查询、更新、删除数据操作。
MySQL 8.0
支持的存储引擎有InnoDB
、MyISAM
、Memory
、Merge
、Archive
、Federated
、CSV
、BLACKHOLE
Innodb和Myisam的区别
InnoDB
支持事务,MyISAM
不支持事务InnoDB
支持事务,MyISAM
不支持事务。这是MySQL
将默认存储引擎从MyISAM
变成InnoDB
的重要原因之一。InnoDB
是MySQL
的数据库引擎之一,现为MySQL
的默认存储引擎
InnoDB
支持外键,MyISAM
不支持外键InnoDB
支持外键,而MyISAM
不支持。对一个包含外键的InnoDB
表转为MyISAM
会失败
InnoDB
是聚簇索引,Myisam
是非聚簇索引InnoDB
是聚集索引,MyISAM
是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此InnoDB
必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM
是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB
不保存表的具体行数,MyISAM
保存表行数InnoDB
不保存表的具体行数,执行select count(*) from table
时需要全表扫描。而
MyISAM
用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。
InnoDB
最小的锁粒度是行锁,MyISAM
是表锁InnoDB
最小的锁粒度是行锁,MyISAM
最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是MySQL
将默认存储引擎从MyISAM
变成InnoDB
的重要原因之一;
适用场景
- 如果需要提供回滚、崩溃恢复能力的ACID事务能力,并要求实现行锁级别并发控制,
InnoDB
是一个好的选择。 - 如果数据表主要用来查询记录,读操作远远多于写操作且不需要数据库事务的支持,则
MyISAM
引擎能提供较高的处理效率。
- 如果需要提供回滚、崩溃恢复能力的ACID事务能力,并要求实现行锁级别并发控制,