mysql 1条sql事如何运行的

==1


逻辑架构

1.MySQL的框架有几个组件, 各是什么作用?
2.Server层和存储引擎层各是什么作用?
3.you have an error in your SQL syntax 这个保存是在词法分析里还是在语法分析里报错?
4.对于表的操作权限验证在哪里进行?
5.执行器的执行查询语句的流程是什么样的?
连接器的权限和优化器的权限?

==2 redo bin日志


redolog

1 redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
2 redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
3 redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。


update流程

redo是为了 crash-safe binlog是为了恢复
  1. redo log的概念是什么? 为什么会存在.
  2. 什么是WAL(write-ahead log)机制, 好处是什么.
  3. redo log 为什么可以保证crash safe机制.
  4. binlog的概念是什么, 起到什么作用, 可以做crash safe吗?
  5. binlog和redolog的不同点有哪些?
  6. 物理一致性和逻辑一直性各应该怎么理解?
  7. 执行器和innoDB在执行update语句时候的流程是什么样的?
  8. 如果数据库误操作, 如何执行数据恢复?
  9. 什么是两阶段提交, 为什么需要两阶段提交, 两阶段提交怎么保证数据库中两份日志间的逻辑一致性(什么叫逻辑一致性)?
  10. 如果不是两阶段提交, 先写redo log和先写bin log两种情况各会遇到什么问题?

==3事务隔离
1读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
2读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。oracle
3可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
4串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。


事务隔离的实现--重复读

就是当系统里没有比这个回滚日志更早的 read-view 的时候 回滚日志删除
1.事务的概念是什么?
2.mysql的事务隔离级别读未提交, 读已提交, 可重复读, 串行各是什么意思?
3.读已提交, 可重复读是怎么通过视图构建实现的?
4.可重复读的使用场景举例? 对账的时候应该很有用?
5.事务隔离是怎么通过read-view(读视图)实现的?
6.并发版本控制(MCVV)的概念是什么, 是怎么实现的?
7.使用长事务的弊病? 为什么使用常事务可能拖垮整个库?
8.事务的启动方式有哪几种?
9.commit work and chain的语法是做什么用的?
10.怎么查询各个表中的长事务?
11.如何避免长事务的出现?

==4索引1


hash表

hash表 keyhash value 放数组
哈希表这种结构适用于只有等值查询的场景,Memcached 及其他一些 NoSQL 引擎。


有序数组

有序数组在等值查询和范围查询场景中的性能就都非常优秀
有序数组索引只适用于静态存储引擎


二叉树

N叉树、跳表、LSM树,innodb 整数字段 的N 是1200


image.png

表中 R1~R5 的 (ID,k) 值分别为 (100,1)、(200,2)、(300,3)、(500,5) 和 (600,6),两棵树的示例示意图如上。

如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。

显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。

只有一个索引;该索引必须是唯一索引。-->KV

你可能感兴趣的:(mysql 1条sql事如何运行的)