分享 / 0 / 1 / 创建于 4年前 / 更新于 4年前
主要是分享讨论一些有意思的问题,也可以用这个当做MySQL知识体系的自查表
MySQL查询缓存的利弊及原因?MySQL引擎Innodb和MyIsam的优缺点及使用场景?Redolog 和 Binlog的区别及执行过程? 以及使用crash-safe机制如何保证数据丢失后正常恢复?
自答:
问题1:
查询缓存的优点是进行查询时如果有符合条件的查询缓存,则直接从缓存中返回给客户端,不需要进行后续一系列的操作,减少耗时和资源开销 缺点是查询缓存只要相应表更新,那么该表相关的所有查询缓存会全部失效,对于操作频次较高的表来说,查询缓存的失效率非常高,并且每次进行查询操作还会增加新建查询缓存的处理。另外在mysql8版本后,查询缓存功能已经被删除了。
问题2:
Innodb是一个事务型引擎其优点是:支持事务处理、ACID事务特性,支持SQL标准的4中隔离级别,支持行锁和外键约束,可以利用事务日志进行数据恢复,支持分区,表空间。其缺点是服务器资源开销大 myisam优点是读速度比较快,占用资源比较少,其缺点是不支持事务,读写互相阻塞,表级锁定,降低了并发性 适用场景: Innodb:需要使用事务的,需要用到行锁的,大量数据读写,适合高并发的业务 Myisam:不需要使用事务的操作,查询频繁、写少的场景
问题3:
redolog和binlog的区别: redolog是物理日志,属于Innodb引擎特有的,另外redolog是在固定空间大小下进行循环写,当空间被写满的情况下,会擦除之前的旧数据写入新数据 binlog是逻辑日志,属于server层的日志,binlog是追加写,每次写入当序号文件满的情况下,写入到下一个序号文件 执行过程: 写入新行 —> 将新行更新到内存中 —> 写入redolog(prepare) —> 写入binlog —> 提交事务(commit) carsh-safe机制:1、写入redolog(prepare) 2、写入binlog 3、commit 操作1完成,操作2时服务器重启,则事务回滚 操作2完成,操作3是服务器重启,重启后重新进行commit
我要举报该,理由是:
自答:
问题1:
问题2:
问题3: