【Mysql深入理解系列3】执行原理

登录建立连接

  1. 登录维持session
  2. 建立连接,权限缓存
    • 权限缓存在链接里。不用每次查询都校验。效率高。

查看链接数:

1
show processlist;

my.conf

query_cache_type
一般不用。

查看缓存命中情况。

1
show status like '%Qcache%''

为什么这种缓存是鸡肋?

缓存的时候会经常刷新,不适用热点业务。

图片

词法分析器

sql语句拆分成语法树。

语法树:结构化的存储。
图片

语法树拆分后的使用场景:
在分布式事务中 二阶段提交。
commit,rollback

  1. 通过语法树会记录反向操作。在回滚的时候直接rollback。
  2. 补偿机制。构建补偿sql。进行回滚重放。

优化器

条件查询,会判断哪种效率高用哪种,或者判断用哪种索引或者不用索引。

执行器

调用响应的引擎执行操作。

bin-log归档

不小心删了库怎么找回来?

server层实现的 bin-log技术。

bin-log记录的逻辑语句的影响。

bin-log格式有三种statement,row,mixed

1
2
binlog-format=ROW
sync-binlog=1

statement:记录的是这条操作语句的逻辑, 产生结果的过程。
row: 记录这个语句影响那条记录之后的结果。
row: mixed两种都记录。

如果记录的是statement

1
update * from xxx where h=xx or b=xxx

优化器走的索引不一致,可能产生主从不一致。

所以最好bin-log用row

bin-log恢复

1
flush logs;

重新开个bin-log文件进行记录。

恢复

1
mysqlbinlog --no-defaults /**/*/mysql-bin.00001 | mysql -uroot -p xxx

参数:

1
2
--start-position
--end-position