mysql

mysql是怎样执行的

首先mysql连接器处理和客户端的连接,之后接收到客户端的请求后,分析器开始进行词法分析,语法分析,之后将分析后的结果传给优化器,优化器会生成执行计划,进行索引选择,然后将执行计传给执行器,执行器调用存储引擎进行读写操作,最后将执行结果返回给客户端

讲一下mysql的事务

mysql的事务简称ACID,原子性,一致性,隔离性,持久性,其中隔离性有四种级别,分别是读未提交,读已提交,可重复读,串行化,隔离性是使用mvcc实现的

Mysql的redo log,binlog,undo log是干什么用的

undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC

redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复

binlog (归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制

什么是next-key lock

锁一个区间,左开右闭,枷锁原则是

1. next-key lock 是前开后闭

2. 查找过程中访问到的对象才会加锁,比如用不到主键索引时不加锁

3. 索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。

4. 索引上的等值查询,向右遍历时且最后一个值不满足等值条件的时候,nextkey lock 退化为间隙锁。

5. 唯一索引上的范围查询会访问到不满足条件的第一个值为止。

讲一下mvcc

innodb在开启事务时会生成一个事务id,是按先后顺序严格递增的,数据更新时会使记录更新的事务id,这样一行数据会有多个版本,每个版本的事务id不一样,当事务启动时,会记录当前所有未提交事务的id,然后将事务id排序,最小的为低水位,最高的为高水位,小于低水位的事务id是可见的,大于高水位的事务是不可见的,在低水位和高水位之间的事务id,如果在未提交的集合里是不可见的,分则是可见的

在mvcc下怎样保证更新逻辑没有问题?

mvcc是快照读,更新时是当前读,当前读时会加行所,只有前一个事务更新完释放行所后才能执行,此时看到的数据就是最新的数据

讲一下mysql的索引

mysql的innodb引擎是使用b+树作为索引的,索引又分为主键索引和普通索引,主键索引对应的值是数据,普通索引对应的值是主键索引

怎么避免回表

把需要查询的内容建立联合索引,比如想通过条件a获取b列的值,那么建一个ab的联合索引就可以避免回表


innodb引擎使用自增主键有什么好处

b+树的存储是有序的,如果按照顺序写入,就会按顺序将数据填满,如果是随机顺序的话会出现数据写入已满的数据页,这个时候需要申请一个新的数据页并且挪动数据过去,这个过程叫做页分裂,页分裂会影响性能和空间利用率

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容