Memorydoc
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Memorydoc

术尚可求
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
    • HTML
    • CSS
    • 前端拓展
  • 编程之道

    • 并发编程
    • 设计模式
    • 数据结构算法
    • 技术拓展
    • 技术陷阱
    • 面试宝典
  • 分布式

    • 微服务
    • 数据库
  • 项目优化实战

    • JVM 优化
    • 线程池优化
    • 模板引擎优化
    • 任务调度优化
    • 内存优化
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 并发编程

  • 设计模式

  • 数据结构算法

  • 技术拓展

  • 技术陷阱

  • 面试宝典

  • 微服务

  • 数据库

    • 架构篇
      • Exists 和 In 区别
    • Mysql数据库索引原理
    • Mysql数据库索引原理(二)
    • Mybatis 插入数据优化
    • 慢查询
    • 事务
    • 数据库优化
    • Mysql 事务与锁机制
  • 项目优化背景

  • JVM优化

  • 技术架构
  • 数据库
Memorydoc
2022-03-07

架构篇

# Mysql 训练营(一)

# mysql默认的连接超时时间

SHOW GLOBAL VARIABLES LIKE 'wait_timeout'
1

# 最大连接数

show variables  like 'max_connections'
1

# Mysql sql执行过程

client -> query_cache -> paser (解析器)-> pre processor (预处理器)-> optimizer (优化器)

-> execution plans(执行计划) -> 执行器 (运用执行计划,调用存储引擎api,进行数据交互)

-> 存储引擎

image-20200801230542552

image-20200801230613424

# 一条update(增删改) 在mysql服务端经历了什么?

先从存储引擎中拿到要修改的数据,在执行器中按照sql进行处理数据,处理完成数据之后,在将数据写回到磁盘(这时,就会记录 redo log 和undo log)

# 存储引擎和磁盘 进行交互

image-20200801231758408

BufferPool 写redo log 的时候,是顺序写入的, 但是写入Disk 中的数据是随机写入的

# undo log

事物回滚需要使用的日志是undo log

# binlog 日志(在server端)

mysql主从数据库的时候,会用到该日志, slave 会订阅binlog日志(记录了 master 中DDL 和 DML语句)

  • 记录DDL 和DML 语句

image-20200801234730813

# update 语句整体执行流程

image-20200801235047430

# Exists 和 In 区别

select * from A where id in ( select id from B)

  • In 会将 select id from B 中的数据加载到 缓存 中, 如果进行判断时,如果B的数据小, 会大大提高查询效率, 而且 减少内存消耗

select * from A where exists (select 1 from B where B.id = A.id )

  • exists 是会执行 A.lenth 次 查询数据库,进行 子查询中数据的比对,如果A越小,那么效率会越高

总结为: In 小表 Exist 大表(B这个时候 要比A 大,这样A就是小表,那么A.lenth就小,那么查询效率就高)

编辑 (opens new window)
上次更新: 2022/05/01, 19:42:49
网站限流
Mysql数据库索引原理

← 网站限流 Mysql数据库索引原理→

最近更新
01
命令模式 原创
05-03
02
桥接模式 原创
05-02
03
优雅写代码三 原创
04-29
更多文章>
Theme by Memorydoc | Copyright © 2021-2022 Memorydoc | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式