feat:更新MySQL文档

This commit is contained in:
2026-05-27 14:17:04 +08:00
parent efc1f5fbae
commit 46545ca0c2
2 changed files with 53 additions and 13 deletions

View File

@@ -45,7 +45,7 @@ export const routers = [
items: [ items: [
{ text: 'MyBatis简介和使用', link: '/Web/MySQL/MyBatis' }, { text: 'MyBatis简介和使用', link: '/Web/MySQL/MyBatis' },
{ text: 'Flyway简单使用', link: '/Web/MySQL/Flyway' }, { text: 'Flyway简单使用', link: '/Web/MySQL/Flyway' },
{ text: 'MySQL知识点', link: '/Web/MySQL/MySQL-Knowledge' }, { text: 'MySQL知识点', link: '/Web/MySQL/Summary' },
{ text: 'SQL高阶用法', link: '/Web/MySQL/SQL-Advance' } { text: 'SQL高阶用法', link: '/Web/MySQL/SQL-Advance' }
] ]
}, },
@@ -79,7 +79,7 @@ export const routers = [
] ]
}, },
{ {
text: '🚀 DevOps', text: '🚀 运维部署',
items: [ items: [
{ text: 'OpenObserve部署和使用', link: '/DevOps/OpenObserve' }, { text: 'OpenObserve部署和使用', link: '/DevOps/OpenObserve' },
{ text: 'Jenkins部署和使用', link: '/DevOps/Jenkins' }, { text: 'Jenkins部署和使用', link: '/DevOps/Jenkins' },

View File

@@ -110,7 +110,7 @@ FROM employees;
# 二、索引 # 二、索引
  索引是对数据库表中的一列或多列值进行**排序**的一种结构,使用索引可以快速访问数据库表中的特定信息。   索引是对数据库表中的一列或多列值进行**排序**的一种结构,使用索引可以快速访问数据库表中的特定信息。
  **索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度)**   **索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高性能(查询速度),相当于用空间换时间。**
## 2.1 优缺点 ## 2.1 优缺点
优点: 优点:
@@ -177,7 +177,7 @@ CREATE INDEX idx_name ON users(name);
SELECT * FROM users WHERE name = "张三"; SELECT * FROM users WHERE name = "张三";
``` ```
4. 合索引 4. 合索引
多个字段组合的索引​ 多个字段组合的索引​
```sql ```sql
CREATE INDEX idx_name_age_city ON users(name, age, city); CREATE INDEX idx_name_age_city ON users(name, age, city);
@@ -188,9 +188,21 @@ SELECT * FROM users WHERE name = '张三' AND age = 25 AND city = '北京';
SELECT * FROM users WHERE age = 25; -- 无法使用索引 SELECT * FROM users WHERE age = 25; -- 无法使用索引
SELECT * FROM users WHERE city = '北京'; -- 无法使用索引 SELECT * FROM users WHERE city = '北京'; -- 无法使用索引
``` ```
  合索引的使用最左前缀原则。   合索引的使用最左前缀原则。最左前缀原则指的是查询从索引的最左列开始不能跳过索引中的列。比如有A、B、C这3列作为索引则查询语句中必须是A、AB、AC、ABC不能是BC这样的跳过了ASQL语句中字段的位置可以任意但一定要包含比如CBA顺序也可以。
&emsp;&emsp;联合索引中,出现范围查询(<, >),范围查询右侧的列索引失效。可以用>=或者<=来规避索引失效问题。
&emsp;&emsp;`CREATE INDEX idx_name_age_city ON users(name, age, city);`相当于创建了3个索引`users(name)users(name, age)users(name, age, city)`​。 &emsp;&emsp;`CREATE INDEX idx_name_age_city ON users(name, age, city);`相当于创建了3个索引`users(name)users(name, age)users(name, age, city)`​。
::: tip
在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:
| 分类 | 含义 | 特点 |
|---|---|---|
| 聚集索引 | 将数据存储与索引放在一起,索引结构的叶子节点保存了行数据 | 必须有,而且只有一个 |
| 二级索引 | 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键值 | 可以存在多个 |
&emsp;&emsp;聚集索引就是主键索引,其他的都是二级索引,不能存放所有的数据。
&emsp;&emsp;比如查询`select * from user where name = 'Arm';`时,虽然使用了索引,但是只能查到`Arm`对应的`user_id`主键值,还需要根据主键值去查找完整的行记录。
:::
## 2.5 索引设计 ## 2.5 索引设计
* 为WHERE条件添加索引 * 为WHERE条件添加索引
```sql ```sql
@@ -398,13 +410,41 @@ COMMIT;
6. 隔离级别定义了事务间数据的可见性,而日志(尤其是 undo log 和 binlog为这种“可见性”提供了实现基础。undo log 是实现 MVCC多版本并发控制 的基础,而 MVCC 是 REPEATABLE READ 等隔离级别的关键。binlog 虽不直接影响隔离性,但它记录了事务的变更历史,是构建主从环境、实现数据恢复的基础。 6. 隔离级别定义了事务间数据的可见性,而日志(尤其是 undo log 和 binlog为这种“可见性”提供了实现基础。undo log 是实现 MVCC多版本并发控制 的基础,而 MVCC 是 REPEATABLE READ 等隔离级别的关键。binlog 虽不直接影响隔离性,但它记录了事务的变更历史,是构建主从环境、实现数据恢复的基础。
# 五、优化 # 五、优化
## 5.1 Explain 执行计划 ## 5.1 开启慢查询
&emsp;&emsp;`EXPLAIN`​是 MySQL 自带的一个诊断工具,它可以模拟 MySQL 查询优化器的执行过程,对`SELECT`​语句(在 MySQL 8.0 及以上版本,也支持对`UPDATE`​、`DELETE`​等语句使用)进行分析,并输出该语句的执行计划。 &emsp;&emsp;查看慢查询是否开启:
### 5.1.1 基本用法 ```bash
&emsp;&emsp;在select语句前面加上EXPLAIN关键字即可例如`EXPLAIN SELECT * FROM users WHERE age > 25; SHOW VARIABLES LIKE 'slow_query_log';
` SHOW VARIABLES LIKE 'slow_query_log_file';
```
### 5.1.2 输出列说明 &emsp;&emsp;临时开启慢查询,重启服务后无效:
```bash
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;
```
&emsp;&emsp;永久开启慢查询:
```bash
[mysqld]
slow_query_log = ON
long_query_time = 1
```
&emsp;&emsp;开启后可以通过查看`SHOW VARIABLES LIKE 'slow_query_log_file'`查看记录的文件路径。
## 5.2 查看SQL运行时间
```bash
SET profiling = 1;
SELECT name, age FROM users WHERE name = "user235909051";
SHOW PROFILES;
```
## 5.3 Explain 执行计划
&emsp;&emsp;`EXPLAIN`​是 MySQL 自带的一个诊断工具,它可以模拟 MySQL 查询优化器的执行过程,对`SELECT`​语句(在 MySQL 8.0 及以上版本,也支持对`UPDATE`​、`DELETE`​等语句使用)进行分析,并输出该语句的执行计划。
### 5.3.1 基本用法
&emsp;&emsp;在select语句前面加上EXPLAIN关键字即可例如`EXPLAIN SELECT * FROM users WHERE age > 25;`
### 5.3.2 输出列说明
| 列名 | 说明 | 示例 | | 列名 | 说明 | 示例 |
| :-: | :-: | :-: | | :-: | :-: | :-: |
| id | 查询标识符 | 相同 id 表示同组查询,执行顺序从上到下;不同 id 值越大优先级越高 | | id | 查询标识符 | 相同 id 表示同组查询,执行顺序从上到下;不同 id 值越大优先级越高 |
@@ -420,7 +460,7 @@ COMMIT;
| filtered | 存储引擎返回数据后在 server 层过滤的比例 | | | filtered | 存储引擎返回数据后在 server 层过滤的比例 | |
| **Extra** | 额外执行信息 | | | **Extra** | 额外执行信息 | |
### 5.1.3 重要指标Type ### 5.3.3 重要指标Type
| 类型 | 描述 | 性能 | 示例 | | 类型 | 描述 | 性能 | 示例 |
| - | - | - | - | | - | - | - | - |
| system | 系统表,仅一行 | 最优 | MyISAM 引擎的空表 | | system | 系统表,仅一行 | 最优 | MyISAM 引擎的空表 |
@@ -436,7 +476,7 @@ COMMIT;
| index | 全索引扫描 | 差 | SELECT indexed_col FROM table | | index | 全索引扫描 | 差 | SELECT indexed_col FROM table |
| ALL | 全表扫描 | 最差 | 无索引查询| | ALL | 全表扫描 | 最差 | 无索引查询|
### 5.1.4 重要指标Extra ### 5.3.4 重要指标Extra
| 值 | 含义 | 优化建议 | | 值 | 含义 | 优化建议 |
| - | - | - | | - | - | - |
| Using index | 覆盖索引(无需回表) | 优,保持 | | Using index | 覆盖索引(无需回表) | 优,保持 |