MySQL使用EXPLAIN关键字段:

explain关键字用于分析sql语句的执行情况,可以通过他进行sql语句的性能分析。 

type:表示连接类型,从好到差的类型排序为 :
    system:系统表,数据已经加载到内存里。 
    const:常量连接,通过索引一次就找到。 
    eq_ref:唯一性索引扫描,返回所有匹配某个单独值的行。 
    ref:非主键非唯一索引等值扫描,const或eq_ref改为普通非唯一索引。 
    range:范围扫描,在索引上扫码特定范围内的值。 
    index:索引树扫描,扫描索引上的全部数据。 
    all:全表扫描。

key:显示MySQL实际决定使用的键。 
key_len:显示MySQL决定使用的键长度,长度越短越好 

Extra:额外信息 
    Using filesort:MySQL使用外部的索引排序,很慢需要优化。 
    Using temporary:使用了临时表保存中间结果,很慢需要优化。 
    Using index:使用了覆盖索引。 
    Using where:使用了where。

 

MySQL优化过程:
1.通过慢日志定位执行较慢的SQL语句
2.利用EXPLAIN关键字段进行分析
3.根据分析结果进行优化
 
 
简述MySQL的日志log
redo log:存储引擎级别的log(InnoDB有,MyISAM无)。关注事务的恢复,在重启mysql服务的时候,根据redo log重做,从而使事务具有持久性。
undo log:存储引擎级别的log(InnoDB有,MyISAM无)。保证数据的原子性,该log保存了事务之前的数据版本,可用于回滚,是MVCC的重要实现方法之一。
bin log:数据库级别的log,关注恢复数据库的数据。
 
 
 
事务满足以下特性:
原子性:事务内的语句要么全部成功要么全部失败
一致性:事务执行前后数据库的状态一致
隔离性:多个并发事务对数据库进行操作,事务互不干扰
持久性:事务执行完毕后对数据的修改是永久的
 
 
数据库中多个事务同时进行可能发生的问题:
  • 丢失修改
  • 脏读
  • 不可重读
  • 幻读
 
 
 
SQL的事务隔离级别有哪些?
  • 读未提交:一个事务还没提交,但其修改能被别的事务看到
  • 读提交:一个事务提交后,其修改才能被别的事务看到
  • 可重复读:一个事务执行过程中看到的数据和启动时看到的数据一直都是一样的。
  • 串行化:后面执行的事务需前面执行的事务完成后才能继续执行
 
 
什么是MVCC?
MVCC-多版本并发控制,即同一记录在系统存在多个版本。其目的是在保证数据一致性的前提下提供高并发的访问性能。
 
读提交和可重复读都是基于MVCC,它们的区别?
 
 
 
InnoDB如何保证事务的原子性持久性一致性?
利用undo log保持原子性。(undo log可回滚)
利用redo log保持持久性。(redo log在重启数据库时关注数据恢复)
利用undo log+redo log保持一致性。事务执行需要redo log,若执行失败就回滚(使用undo log)
 
 
MySQL如何保证主从一致?
binlog(二进制日志),记录所有修改了数据库的语句。
 
 
 
redo log和binlog区别?
 
 
crash-safe能力是什么?
InnoDB通过redo log保证数据库即使异常重启也能恢复数据,这个能力叫crash-safe
 
 
WAL(Write-Ahead Logging)技术?
先写日志再写磁盘。在事务提交前,先写redo log,后面再找合适的时机批量刷盘提高性能。(因为写入磁盘涉及到随机IO访问,十分消耗时间)
 
 
两阶段提交?
为了保证binlog和redo log两个日志的逻辑一致,最终的主从数据库数据一致,采用的机制。
处理过程:
 
 
MySQL主从复制
实现数据的多处自动备份,增加数据库安全性,进行读写分离,提高数据库负载性能。
主从复制流程:
1.事务完成前,主库在binlog记录改变,完成binlog写入后,主库通知存储引擎提交事务。
2. 从库将主库的binlog复制到对应的中继日志,即开辟一个I/O工作线程,I/O线程在主库上打开一个普通的连接,然后开始binlog dump process,将这些事件写入中继日志。从主库的binlog中读取事 件,如果已经读到最新了,线程进入睡眠并等待ma主库产生新的事件。
 
读写分离:只在MySQL主库写和读
 

 

posted on 2022-07-31 18:34  Jolyne123  阅读(78)  评论(0编辑  收藏  举报