🎷 MySQL基本知识

吞佛童子2022年6月9日
  • db
  • mysql
大约 3 分钟

🎷 MySQL基本知识

1. 基础架构

img.png

1) 连接器

  • 跟客户端建立链接、获取权限、维持和管理连接

  • 连接时通过 TCP 传输,有握手过程

  • 输入 用户名 & 密码,验证通过后就可继续进行

  • 但此时该连接处于 空闲状态

查看空闲列表 - Command 列处于 Sleep 状态即为 空闲状态

img_1.png

[注:] : 超出 MySQL wait_timeout 后连接器自动断开

查看 wait_timeout

img_2.png

[注:] : default = 28800 s = 8 h


2) 查询缓存

  • 作用对象: 查询请求
    • 限制条件:
      • 必须大小写,空格等所有字符完全一模一样才可以共享
      • 优点: 可以避免硬解析
  • 若命中缓存,则直接返回 res
  • MySQL 4.0 引入 ==> MySQL 5.6 默认禁用 ==> MySQL 5.7废弃 => MySQL 8.0 彻底删除

优点:

  • 若命中,则效率提高
  • 适用于对表修改较少,查询多的情况

缺点:

  • 表一旦有修改,与该表有关的所有缓存均清空
  • 不适用于对表修改较多的常规情况

查看是否开启缓存功能

img_3.png


3) 分析器

功能:

  • 词法分析
    • 识别每个字符串所代表的是什么,是关键字,还是表名,还是列名等等
  • 语法分析
    • 根据词法分析的结果,判断是否有语法问题,有问题则报错

img_4.png


4) 优化器

功能:

  • 索引
    • 判断是否存在索引,是否使用索引,使用哪个索引
  • 执行顺序
    • 先执行什么命令,先对哪张表进行查询等

5) 执行器

功能:

  • 权限判断
    • 虽然已经成功连接,但不一定有该操作步骤的权限,不同用户权限可能不同
  • 执行语句
    • 可能直接从 buffer pool 中直接返回 res
    • 也可能需要查询磁盘存储
    • 若执行事务操作,还需要记录相关日志

2. 三大范式

  1. 数据库中的字段具有「原子性」,不可再分,并且是单一职责
    • 例如,用户表中的 用户地址 还可以进一步拆分为 国家、省、市 等字段
  2. 非主键列 完全依赖于 主键,而非 主键的一部分
    • 例:订单表中,存储的重要区分字段是 商品信息 & 用户信息,因此此时 主键应该设为 商品id & 用户id
  3. 非主键列 只依赖于 主键,而非其他非主键列
    • 例:订单表中,不可存储 用户信息 - 姓名、地址等

3. 连接

1) 内连接

  • 两张表中满足 连接匹配关系 的记录 - 两张表的交集

2) 左外连接

  • 两张表进行连接查询时,返回 左表所有满足条件的行记录

3) 右外连接

  • 两张表进行连接查询时,返回 右表所有满足条件的行记录

4) 笛卡尔积

  • 假设 集合 A 有 m 个元素,集合 B 有 n 个元素,那么 A x B = m * n 种不同组合
  • 用于 数据库的交叉连接中
上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou