doris和mysql及tidb对比_回滚

1.分为server层和存储引擎层
server层又划分为连接器,解析器,优化器,执行器,存储引擎层则是innodb或者myisam等不同的存储引擎。
连接器管理连接,临时内存也是分配在连接对象上
解析器 对sql进行词法解析 语法解析 ,验证sql的语法正确性
优化器 确定使用哪个索引 连接的方式 等
执行器 调存储引擎的接口取数据,同时对数据进行处理 比如说order by group join 等

2.常用的存储引擎 innodb和myisAm
区别 innodb支持事务,支持行级锁, myisAm不支持
innodb支持online DDL ,myisAM不支持
innodb执行DDL有repalce和copy两种模式,myisAM只有copy模式
只看性能,myisAM较高,但是看功能 innoDB强大

3.mysql索引实现机制是B+树,分为聚簇索引和二级索引,二级索引就是普通索引,存储的是索引key和聚簇索引的key 。 也就是普通索引的查找,需要去聚簇索引上回表再查一次。
为什么使用B+树,如果使用有序数组,查询快(二分法),但是插入不行,要挪动后面的数据。
如果使用hash, 范围查询性能不行,只能挨个遍历了。
二叉树,查询快,也支持范围,插入也快,但是节点过少 树太高,查询的时候需要多遍历数据块,IO次数就多。
B+树 结合以上的优点,实现了查找快,二分法,插入快 logN ,树高低 为3层 ,IO次数少。
B+树在子节点满的时候,需要分裂,创建新的节点,然后把一半子节点挂过去,导致空间利用率变低。
除了B+树,还有一种B树,B树在兄弟结点上也有指针,在节点满的时候,把多余的节点挂到兄弟结点上,避免了创建新节点,比B+树空间利用率更高 页分裂次数少。

4.事务的原理。
undolog+mvcc+行级锁
事务有四个隔离级别
1.读未提交,直接当前读即可,不需要特殊处理。
2.读提交 ,可重复读 利用mvvc (并发版本控制)实现,每个事务在启动的时候,申请一个事务id
当事务更改数据之后,数据记录会维护这个事务id,代表一个版本,数据会有多个版本。
读提交,每个语句都开启一次一致性视图。
可重复读,事务启动的时候开启一次一致性视图。
在一致性视图开启的时候,会存下来当前正在执行的事务的id,保存到一个数组中。
当读到的数据记录,其事务id如果在这个数组中,表示其是还没提交的事务,就通过undolog去计算它的上一个版本,得到上一个版本的数据,依次类推。
undolog是回滚日志,当数据记录被修改的时候就会记录undolog,是一种逻辑日志,记录的是回滚语句。
如果事务回滚,那么就执行undolog对数据进行回滚。
undolog只有在没有比这个undolog更早的一致性视图的时候才会删除,也就是当最早的事务都提交之后,undolog就删除了。
4.串行化,通过行级锁实现,对涉及到的数据都加上锁。

5.mysql常用的优化策略
1.加索引
利用索引覆盖,索引下推,减少回表
利用索引自身的顺序,避免排序
2.事务
避免大事务
开启死锁检测
事务超时监控
3.慢sql优化
4.长字符串的列,可以存储hash或者前缀索引 来减少空间使用。
5.数据刷盘的参数调整,根据机器的磁盘性能调整。