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