MySQL 的一条语句的执行流程。 myisam和innodb的区别
分为客户端,服务端,存储引擎三部分。
mysql 8.0后,取消缓存。
1. myisam和innodb的区别。
Mysql的InnoDB和MyISAM存储引擎的常见区别如下:
锁支持:MyISAM 只有表级锁(table-level locking),读取时加共享表锁,写入时加排它表锁,MyISAM 一锁就是锁住了整张表,在并发写的时候InnoDB性能远超MyISAM。而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁,行锁大幅度提高了多用户并发操作的新能,但行锁,只是在使用了索引时是有效的,如果没使用索引则会锁全表。
事务支持: MyISAM 不提供事务支持,InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力,这一点保证数据的正确性和完整性非常重要。
MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。
MySQL InnoDB 引擎通过 锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是 REPEATABLE-READ )。
保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。
外键支持:MyISAM 不支持,而 InnoDB 支持。但是一般不在数据库使用外键,而是在应用层解决,使用外键会造成级联更新,且级联更新是强阻塞,存在数据库更新风暴的风险;外键用时也会影响数据库的插入速度。
主键支持:MyISAM允许没有主键的表存在。InnoDB表必须有主键,如果没有设定主键,就会自动生成一个 6 字节隐藏列作为主键列(用户不可见)。
数据库崩溃恢复的支持:MyISAM 不支持,而 InnoDB 支持。使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log、undo log、bin log。
MVCC的支持:MyISAM 不支持,而 InnoDB 支持。MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提供性能。
主键自增记录:主键自增时只会比较最大自增主键值。MyISAM 表会把自增主键的最大ID记录到表数据文件里,重启MySQL 自增主键的最大ID也不会丢失。InnoDB 表只是把自增主键的最大 ID 记录到内存中,所以重启数据库会导致最大 ID 丢失,会以表中实际存在的最大主键为准。
实际上MySQL自增主键不能持久化算是一个臭名昭著的bug:bugs.mysql.com/bug.php?id=…。所以在Mysql 8.0后,InnoDB会把自增主键计数器的最新值写入redo log日志中,即使Mysql数据库发生重启,InnoDB也会根据redo log中的计数器信息来初始化其内存值,再也不怕自增主键丢失了。
索引结构:MyISAM使用非聚集索引,索引和数据分开,只缓存索引;InnoDB使用聚集索引,主索引和数据存在一个文件。
行数记录:InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快,但前提是没有任何WHERE条件,如果有条件,则此时都会去实际地去计算表的行数;
https://www.bilibili.com/video/BV1fM4y1i7Dd/?spm_id_from=333.337.search-card.all.click&vd_source=46d50b5d646b50dcb2a208d3946b1598
转载:https://juejin.cn/post/7127279196811821070
2 mysql的日志操作(redo log、undo log、bin log)。
转载:https://juejin.cn/post/6860252224930070536
作者:静默虚空
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)