MySQL体系结构与管理
MySQL介绍与安装
1.1 什么是数据?
|
|
1.2 什么是数据库管理系统(DBMS)?
|
|
1.3 数据库管理系统种类
|
|
二 MySQL简介及产品线
2.1 MySQL行业主流版本
|
|
2.2 企业版本选择(MySQL分支版本)
|
|
2.3 版本选择建议
|
|
2.4 课程版本:
|
|
2.5 下载(社区版源码安装)
|
|
2.6 安装方式
|
|
源码安装
rpm方式
yum方式
|
|
通用二进制安装
|
|
MySQL体系结构与管理
一 体系结构
1.1 C/S(客户端/服务端)模型介绍
|
|
1.2 实例介绍
|
|
1.3 mysqld程序运行原理
1.3.1 mysqld程序结构
|
|
1.3.2 一条SQL语句的执行过程
1.3.2.1 连接层
|
|
1.3.2.2 SQL层 (重点)
|
|
1.3.2.3 存储引擎层(类似于Linux中的文件系统)
|
|
1.4 逻辑结构
1.4.1 库(类似于目录)
|
|
1.4.2 表(类似于文件)
|
|
1.5 物理存储结构引入
1.5.1 库的物理存储结构
|
|
1.5.2 表的物理存储结构
|
|
1.5.3 表的段、区、页(16k)(了解)
|
|
二 基础管理
2.1 用户、权限管理
2.1.1 用户
作用:
|
|
定义:
|
|
管理操作:
|
|
2.1.2 权限
针对用户设置权限,权限是用户的属性
权限管理操作:
|
|
常用权限介绍:
|
|
权限作用范围:
|
|
需求1:windows机器的navicat登录到linux中的MySQL,管理员用户。
|
|
需求2:创建一个应用用户app用户,能从windows上登录mysql,并能操作app库
|
|
2.1.3 开发人员用户授权流程
|
|
2.1.4 提示:8.0在grant命令添加新特性
|
|
2.1.5 查看授权
|
|
2.1.6 回收权限
|
|
2.1.7 本地管理员用户密码忘记.
|
|
2.2 连接管理
2.2.1 自带客户端命令
mysql 常用参数:
|
|
2.3 多种启动方式介绍
提示:
|
|
2.4 初始化配置
2.4.0 作用
|
|
2.4.1 初始化配置的方法
|
|
2.4.2 初始配置文件
初始化配置文件的默认读取路径
|
|
配置文件的书写方式:
|
|
2.5 多实例的应用
2.5.1 准备多个目录
|
|
2.5.2 准备配置文件
|
|
2.5.3 初始化三套数据
|
|
2.5.4 systemd管理多实例
|
|
2.5.5 授权
|
|
2.5.6 启动
|
|
2.5.7 验证多实例
|
|
SQL基础应用
一 SQL介绍
|
|
二 常用SQL分类
|
|
2.1 客户端命令
|
|
三 数据类型、表属性、字符集
3.1 数据类型
3.1.1 作用
|
|
3.1.2 种类
数值类型
|
|
字符类型
image
|
|
时间类型
|
|
二进制类型
json格式
5.6以后支持
3.2 表属性
3.2.1 列属性
|
|
3.2.2 表的属性
|
|
3.3 字符集和校对规则
3.3.1 字符集(charset)
|
|
3.3.2 校对规则(排序规则,collation)
|
|
四 DDL应用
4.1 数据定义语言
数据定义语言,对库和表进行操作,操作mysql的对象,即库和表,对元数据进行操作
4.2 库定义
4.2.1 创建
4.2.1 创建数据库
|
|
建库标准语句
|
|
4.2.2 删除(生产中禁止使用)
|
|
4.2.3 修改
|
|
4.2.4 查询库相关信息(DQL)
|
|
4.3 表定义
4.3.1 创建
|
|
4.3.2 建表
|
|
建表规范:
|
|
4.3.2 删除(生产中禁用命令)
|
|
4.3.3 修改
- 在stu表中添加qq列
|
|
- 在sname后加微信列
|
|
- 在id列前加一个新列num
|
|
- 把刚才添加的列都删掉(危险)
|
|
- 修改sname数据类型的属性
|
|
- 将sgender 改为 sg 数据类型改为 CHAR 类型(change需要把原来不需要修改的也带上)
|
|
注意:
在mysql中,DDL语句在对表进行操作时,是要锁“元数据表”的,此时,所有修改类的命令无法运行
(元数据:记录表的各种信息,对数据锁定,才能修改,否则都去改,就会出问题)
大表加一列,业务繁忙的表,要谨慎
8.0以前版本需要借助,可以借助pt-osc(pt-online-shaema-change),gh-ost工具进行DDL操作
4.3.4 表属性查询(DQL)
|
|
五 DCL应用 ****
|
|
六 DML应用
6.1 作用
|
|
6.2 insert
|
|
6.3 update
|
|
6.4 delete(危险!!)
|
|
全表删除:
|
|
伪删除:
用update来替代delete,最终保证业务中查不到(select)即可
|
|
七 DQL应用(select )
7.1 单独使用
|
|
– select 函数();
|
|
默认执行顺序
|
|
导入数据
|
|
7.2 单表子句-from
|
|
例子:
– 查询city中所有的数据(不要对大表进行操作)
|
|
– 查询city表中,id和姓名
|
|
7.3 单表子句-where
|
|
7.3.1 where配合等值查询
例子:
– 查询中国(CHN)所有城市信息
|
|
– 查询北京市的信息
|
|
– 查询甘肃省所有城市信息
|
|
7.3.2 where配合比较操作符(> < >= <= <>)
例子:
– 查询世界上少于100人的城市
|
|
7.3.3 where配合逻辑运算符(and or )
例子:
– 中国人口数量大于500w
|
|
– 中国或美国城市信息
|
|
7.3.4 where配合模糊查询
例子:
– 查询省的名字前面带guang开头的
|
|
7.3.5 where配合in语句
– 中国或美国城市信息
|
|
7.3.6 where配合between and
例子:
– 查询世界上人口数量大于100w小于200w的城市信息
|
|
7.4 group by + 常用聚合函数
7.4.1 作用
|
|
7.4.2 常用聚合函数
|
|
7.4.3 例子:
例子1:统计世界上每个国家的总人口数.
|
|
例子2: 统计中国各个省的总人口数量(练习)
|
|
例子3:统计世界上每个国家的城市数量(练习)
|
|
例子4:统计中国,每个省总人口,城市个数,城市名列表(重点)
|
|
7.5 having
|
|
例子4:统计中国每个省的总人口数,只打印总人口数小于100w
|
|
7.6 order by + limit
7.6.1 作用
|
|
7.6.2 应用案例
- 查看中国所有的城市,并按人口数进行排序(从大到小)
|
|
- 统计中国各个省的总人口数量,按照总人口从大到小排序
|
|
- 统计中国,每个省的总人口,找出总人口大于500w的,并按总人口从大到小排序,只显示前三名
|
|
7.7 distinct:去重复
|
|
7.8 联合查询- union all
|
|
7.9 join 多表连接查询
7.9.0 案例准备
按需求创建一下表结构:
|
|
7.9.1 语法
|
|
查询张三的家庭住址
|
|
7.9.2 例子:
- 查询一下世界上人口数量小于100人的城市名和国家名
|
|
- 查询城市shenyang,城市人口,所在国家名(name)及国土面积(SurfaceArea)
|
|
7.9.3 别名
|
|
7.9.4 多表SQL练习题
- 统计zhang3,学习了几门课
|
|
- 查询zhang3,学习的课程名称有哪些?
|
|
- 查询oldguo老师教的学生名.
|
|
- 查询oldguo所教课程的平均分数
|
|
4.1 每位老师所教课程的平均分,并按平均分排序
|
|
- 查询oldguo所教的不及格的学生姓名
|
|
5.1 查询所有老师所教学生不及格的信息
|
|
注意:
|
|
7.9.5 综合练习
|
|
7.9.6 补充
别名
|
|
八 元数据信息
8.1 逻辑表有关组成部分
|
|
8.2 information_schema.tables视图
|
|
- 查询整个数据库中所有库和所对应的表信息
|
|
- 统计所有库下的表个数
|
|
- 查询所有innodb引擎的表及所在的库
|
|
- 统计world数据库下每张表的磁盘空间占用
|
|
- 统计所有数据库的总的磁盘空间占用
|
|
- 统计每个库,所有表的个数,表名
|
|
- 统计每个库占用空间大小
|
|
- 生成整个数据库下的所有表的单独备份语句
|
|
- 107张表,都需要执行以下2条语句
|
|
九 show 命令
|
|
索引及执行计划
一 索引作用
|
|
二 索引的种类(算法)
|
|
三 B树 基于不同的查找算法分类介绍
B 树
B+树
B*树
在b+tree基础上,枝节点也加入了双向指针(Innodb,使用B*树)
|
|
四 在功能上的分类
4.1 聚簇索引构建B树(簇就是区)
4.1.1 前提
|
|
4.1.2 作用
有了聚簇索引,将来插入的数据行,在同一个区内,都会按照id值的顺序,有序存储数据
4.2.3 聚簇索引构建B树过程
|
|
4.2 辅助索引(S)构建B+树
4.2.1 前提
|
|
4.2.2 作用
|
|
4.2.3 辅助索引构建B树过程
|
|
4.4 聚簇索引和辅助索引构成区别
|
|
五 辅助索引细分
|
|
六 关于索引树的高度受什么影响
|
|
七 索引的基本管理
7.1 索引建立前
|
|
|
|
7.1 单列普通辅助索引
7.1.1 创建索引,删除索引
|
|
7.2 覆盖索引(联合索引)
|
|
7.3 前缀索引
|
|
7.4 唯一索引
|
|
统计city表中,以省的名字为分组,统计组的个数
|
|
7.5 查看是否走索引
|
|
7.6 是否走索引压测
|
|
八 执行计划获取及分析
8.0 介绍
|
|
8.1 执行计划获取
获取优化器选择后的执行计划
|
|
8.2 执行计划分析
8.2.0 重点关注的信息
|
|
|
|
8.2.1 type详解
8.2.1.1 简介
|
|
8.2.1.2 ALL
|
|
8.2.1.3 index
|
|
8.2.1.4 range
|
|
8.2.1.5 ref
|
|
8.2.1.6 eq_ref
|
|
8.2.1.7 const
|
|
8.2.2 其他字段解释
8.2.2.1 possible_keys和key
|
|
8.2.2.2 key_len
|
|
8.2.2.3 rows
|
|
8.2.2.4 extra
|
|
8.2.3 explain(desc)使用场景(面试题)
|
|
九 索引应用规范
|
|
9.1 建立索引的原则(DBA运维规范)
9.1.0 说明
|
|
9.1.1 (必须的) 建表时一定要有主键,一般是个无关列
|
|
9.1.2 选择唯一性索引
|
|
9.1.3(必须的) 为经常需要where 、ORDER BY、GROUP BY,join on等操作的字段建立索引
|
|
9.1.4 尽量使用前缀来索引
|
|
9.1.5 限制索引的数目
|
|
9.1.6 删除不再使用或者很少使用的索引(percona toolkit)
|
|
9.1.7 大表加索引,要在业务不繁忙期间操作
9.1.8 尽量少在经常更新值的列上建索引
9.1.9 建索引原则
|
|
9.2 不走索引的情况(开发规范)
9.2.1 没有查询条件,或者查询条件没有建立索引
|
|
9.2.2 查询结果集是原表中的大部分数据,应该是25%以上。
|
|
9.2.3 索引本身失效,统计数据不真实
|
|
9.2.4 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,-,*,/,! 等)
|
|
9.2.5 隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
|
|
9.2.6 <> ,not in 不走索引(辅助索引)
|
|
9.2.7 like “%_” 百分号在最前面不走
|
|
十扩展:优化器针对索引的算法
10.1 mysql索引的自优化-AHI
|
|
10.2 mysql索引的自优化-Change buffer
|
|
以上是(AHI,Change buffer)自优化能力,不需要单独配置,下面的是优化算法
|
|
10.3 ICP:索引下推
|
|
没有ICP的情况
|
|
有ICP的情况
|
|
10.4 MRR-multi range read
|
|
mrr之前
mrr之后
10.5 SNLJ
10.6 BNLJ
10.7 BKA
十一 问题汇总
11.1 怎样减少回表
11.2 更新数据时,会对索引有影响吗,数据的变化索引实时更新吗?
|
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构