🎷 MySQL基本知识
2022年6月9日
- db
🎷 MySQL基本知识
1. 基础架构
1) 连接器
跟客户端建立链接、获取权限、维持和管理连接
连接时通过
TCP
传输,有握手过程输入 用户名 & 密码,验证通过后就可继续进行
但此时该连接处于
空闲状态
查看空闲列表 - Command 列处于 Sleep 状态即为
空闲状态
[注:] : 超出 MySQL wait_timeout
后连接器自动断开
查看
wait_timeout
[注:] : default = 28800 s = 8 h
2) 查询缓存
- 作用对象: 查询请求
- 限制条件:
- 必须大小写,空格等所有字符完全一模一样才可以共享
- 优点: 可以避免硬解析
- 限制条件:
- 若命中缓存,则直接返回 res
- MySQL 4.0 引入 ==> MySQL 5.6 默认禁用 ==> MySQL 5.7废弃 => MySQL 8.0 彻底删除
优点:
- 若命中,则效率提高
- 适用于对表修改较少,查询多的情况
缺点:
- 表一旦有修改,与该表有关的所有缓存均清空
- 不适用于对表修改较多的常规情况
查看是否开启缓存功能
3) 分析器
功能:
- 词法分析
- 识别每个字符串所代表的是什么,是关键字,还是表名,还是列名等等
- 语法分析
- 根据词法分析的结果,判断是否有语法问题,有问题则报错
4) 优化器
功能:
- 索引
- 判断是否存在索引,是否使用索引,使用哪个索引
- 执行顺序
- 先执行什么命令,先对哪张表进行查询等
5) 执行器
功能:
- 权限判断
- 虽然已经成功连接,但不一定有该操作步骤的权限,不同用户权限可能不同
- 执行语句
- 可能直接从
buffer pool
中直接返回 res - 也可能需要查询
磁盘
存储 - 若执行事务操作,还需要记录相关日志
- 可能直接从
2. 三大范式
- 数据库中的字段具有「原子性」,不可再分,并且是单一职责
- 例如,用户表中的 用户地址 还可以进一步拆分为 国家、省、市 等字段
- 非主键列 完全依赖于 主键,而非 主键的一部分
- 例:订单表中,存储的重要区分字段是 商品信息 & 用户信息,因此此时 主键应该设为 商品id & 用户id
- 非主键列 只依赖于 主键,而非其他非主键列
- 例:订单表中,不可存储 用户信息 - 姓名、地址等
3. 连接
1) 内连接
- 两张表中满足 连接匹配关系 的记录 - 两张表的交集
2) 左外连接
- 两张表进行连接查询时,返回 左表所有满足条件的行记录
3) 右外连接
- 两张表进行连接查询时,返回 右表所有满足条件的行记录
4) 笛卡尔积
- 假设 集合 A 有 m 个元素,集合 B 有 n 个元素,那么 A x B = m * n 种不同组合
- 用于 数据库的交叉连接中