diff --git a/docs/.vitepress/theme/router/index.ts b/docs/.vitepress/theme/router/index.ts index 00bb6f1..614c61f 100644 --- a/docs/.vitepress/theme/router/index.ts +++ b/docs/.vitepress/theme/router/index.ts @@ -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' }, diff --git a/docs/Web/MySQL/MySQL-Knowledge.md b/docs/Web/MySQL/Summary.md similarity index 94% rename from docs/Web/MySQL/MySQL-Knowledge.md rename to docs/Web/MySQL/Summary.md index 6779711..d23426f 100644 --- a/docs/Web/MySQL/MySQL-Knowledge.md +++ b/docs/Web/MySQL/Summary.md @@ -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 | 覆盖索引(无需回表) | 优,保持 |