Skip to content

Commit b0a3760

Browse files
committed
docs: 更新文档
1 parent 80078f7 commit b0a3760

File tree

13 files changed

+345
-348
lines changed

13 files changed

+345
-348
lines changed
9.11 KB
Binary file not shown.
945 Bytes
Binary file not shown.
644 Bytes
Binary file not shown.
93.7 KB
Binary file not shown.
19.9 KB
Binary file not shown.
-130 KB
Binary file not shown.
10.4 KB
Binary file not shown.

docs/12.数据库/关系型数据库/MySQL/MySQL_面试.md

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ student(学号、课程号、姓名、学分、成绩)
7373

7474
不符合 2NF 可能会存在的问题:
7575

76-
- **数据冗余** - 每条记录都含有相同信息。
77-
- **删除异常** - 删除所有学生成绩,就把课程信息全删除了。
78-
- **插入异常** - 学生未选课,无法记录进数据库。
79-
- **更新异常** - 调整课程学分,所有行都调整。
76+
- **数据冗余**每条记录都含有相同信息。
77+
- **删除异常**删除所有学生成绩,就把课程信息全删除了。
78+
- **插入异常**学生未选课,无法记录进数据库。
79+
- **更新异常**调整课程学分,所有行都调整。
8080

8181
根据 2NF 可以拆分如下:
8282

@@ -246,8 +246,8 @@ EXISTS 和 IN 区别如下:
246246
- `EXISTS` 用于判断子查询的结果集是否为空。
247247
- `IN` 用于判断某个值是否在指定的集合中。
248248
- **性能**
249-
- **`EXISTS` 先外后内** - 先对外表进行循环查询,再将查询结果放入 `EXISTS` 的子查询中进行条件比较,一旦找到匹配记录,则终止内表子查询。
250-
- **`IN` 先内后外** - 先查询内表,将内表的查询结果作为条件,提供给外表查询语句进行比较。
249+
- **`EXISTS` 先外后内**先对外表进行循环查询,再将查询结果放入 `EXISTS` 的子查询中进行条件比较,一旦找到匹配记录,则终止内表子查询。
250+
- **`IN` 先内后外**先查询内表,将内表的查询结果作为条件,提供给外表查询语句进行比较。
251251
- **应用**
252252
- 如果查询的两个表大小相当,那么 `EXISTS``IN` 差别不大。
253253
- `EXISTS` 适合外表小而内表大的场景。
@@ -470,17 +470,17 @@ ALTER TABLE test CONVERT TO CHARSET utf8mb4;
470470

471471
MySQL 内置了以下存储引擎:
472472

473-
- **InnoDB** - InnoDB 是 MySQL 5.5 版本以后的默认存储引擎。
473+
- **InnoDB**InnoDB 是 MySQL 5.5 版本以后的默认存储引擎。
474474
- 优点:支持**事务**,支持**行级锁**,支持**外键约束**等,**并发性能不错**且支持**自动故障恢复**
475-
- **MyISAM** - MyISAM 是 MySQL 5.5 版本以前的默认存储引擎。
475+
- **MyISAM**MyISAM 是 MySQL 5.5 版本以前的默认存储引擎。
476476
- 优点:速度快,占用资源少。
477477
- 缺点:不支持事务,不支持行级锁,不支持外键约束,也不支持自动故障恢复功能。
478-
- **Memory** - 使用系统内存作为存储介质,以便得到更快的响应速度。不过,如果 mysqld 进程崩溃,则会导致所有的数据丢失。因此,Memory 引擎常用于临时表。
479-
- **NDB** - 也被称为 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。
480-
- **Archive** - Archive 存储引擎有很好的压缩机制,非常适合用于归档数据。
478+
- **Memory**使用系统内存作为存储介质,以便得到更快的响应速度。不过,如果 mysqld 进程崩溃,则会导致所有的数据丢失。因此,Memory 引擎常用于临时表。
479+
- **NDB**也被称为 NDB Cluster 存储引擎,主要用于 MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。
480+
- **Archive**Archive 存储引擎有很好的压缩机制,非常适合用于归档数据。
481481
- Archive 存储引擎只支持 `INSERT``SELECT` 操作。
482482
- Archive 存储引擎采用 zlib 算法压缩数据,压缩比可达到 1: 10。
483-
- **CSV** - 可以将 CSV 文件作为 MySQL 的表来处理,但这种表不支持索引。
483+
- **CSV**可以将 CSV 文件作为 MySQL 的表来处理,但这种表不支持索引。
484484

485485
![](https://raw.githubusercontent.com/dunwu/images/master/snap/202503210712752.png)
486486

@@ -704,9 +704,9 @@ MySQL 支持三种复制方式:同步、异步、半同步。下面是三种
704704

705705
MySQL 异步复制可以分为三个步骤,分别由三个线程完成:
706706

707-
- **binlog dump 线程** - 主库接收事务请求,更新数据,并即时响应客户端(不等待从库)。主库上有一个特殊的 binlog dump 线程,负责将主服务器上的数据更改写入 binlog 中。
708-
- **I/O 线程** - 从库上有一个 I/O 线程,负责从主库上读取 binlog,并写入从库的中继日志(relay log)中。
709-
- **SQL 线程** - 从库上有一个 SQL 线程,负责重放中继日志(relay log),更新从库数据。
707+
- **binlog dump 线程**主库接收事务请求,更新数据,并即时响应客户端(不等待从库)。主库上有一个特殊的 binlog dump 线程,负责将主服务器上的数据更改写入 binlog 中。
708+
- **I/O 线程**从库上有一个 I/O 线程,负责从主库上读取 binlog,并写入从库的中继日志(relay log)中。
709+
- **SQL 线程**从库上有一个 SQL 线程,负责重放中继日志(relay log),更新从库数据。
710710

711711
![](https://raw.githubusercontent.com/dunwu/images/master/cs/database/mysql/master-slave.png)
712712

@@ -794,12 +794,12 @@ MySQL 5.7 引入了半同步复制:主库只需等待**至少 N 个从库**(
794794

795795
MySQL 整个查询执行过程,总的来说分为 6 个步骤:
796796

797-
1. **连接器** - 客户端和 MySQL 服务器建立连接;连接器负责跟客户端**建立连接****获取权限****维持和管理连接**
798-
2. **查询缓存** - MySQL 服务器首先检查查询缓存,如果命中缓存,则立刻返回结果。否则进入下一阶段。MySQL 缓存弊大于利,因为失效非常频繁——任何更新都会清空查询缓存。
799-
3. **分析器** - MySQL 服务器进行 SQL 解析:**语法分析****词法分析**
800-
4. **优化器** - MySQL 服务器用优化器**生成对应的执行计划****根据策略选择最优索引**
801-
5. **执行器** - MySQL 服务器根据执行计划,调用存储引擎的 API 来**执行查询**
802-
6. **返回结果** - MySQL 服务器将结果返回给客户端,同时缓存查询结果。
797+
1. **连接器**客户端和 MySQL 服务器建立连接;连接器负责跟客户端**建立连接****获取权限****维持和管理连接**
798+
2. **查询缓存**MySQL 服务器首先检查查询缓存,如果命中缓存,则立刻返回结果。否则进入下一阶段。MySQL 缓存弊大于利,因为失效非常频繁——任何更新都会清空查询缓存。
799+
3. **分析器**MySQL 服务器进行 SQL 解析:**语法分析****词法分析**
800+
4. **优化器**MySQL 服务器用优化器**生成对应的执行计划****根据策略选择最优索引**
801+
5. **执行器**MySQL 服务器根据执行计划,调用存储引擎的 API 来**执行查询**
802+
6. **返回结果**MySQL 服务器将结果返回给客户端,同时缓存查询结果。
803803

804804
### 【困难】一条 SQL 更新语句是如何执行的?⭐⭐⭐
805805

@@ -1026,11 +1026,11 @@ possible_keys: PRIMARY
10261026

10271027
**执行计划关键字段**
10281028

1029-
- **`type`** - 按性能从高到低排序:`system > const > eq_ref > ref > range > index > ALL`。目标应尽可能避免 `ALL`(全表扫描)。
1030-
- **`possible_keys`** - 可能使用的索引。
1031-
- **`key`** - 实际使用的索引。
1032-
- **`rows`** - 预估需要检查的行数,值越小越好。
1033-
- **`Extra`** - 包含重要补充信息。
1029+
- **`type`**按性能从高到低排序:`system > const > eq_ref > ref > range > index > ALL`。目标应尽可能避免 `ALL`(全表扫描)。
1030+
- **`possible_keys`**可能使用的索引。
1031+
- **`key`**实际使用的索引。
1032+
- **`rows`**预估需要检查的行数,值越小越好。
1033+
- **`Extra`**包含重要补充信息。
10341034

10351035
**执行计划分析步骤**
10361036

docs/12.数据库/关系型数据库/MySQL/MySQL_面试_事务和锁.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ MVCC 的实现原理,主要基于隐式字段、UndoLog、ReadView 来实现
198198

199199
InnoDB 存储引擎中,数据表的每行记录,除了用户显示定义的字段以外,还有几个数据库隐式定义的字段:
200200

201-
- `row_id` - **隐藏的自增 ID**。如果数据表没有指定主键,InnoDB 会自动基于 `row_id` 产生一个聚簇索引。
202-
- `trx_id` - **最近修改的事务 ID**。事务对某条聚簇索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里;
203-
- `roll_pointer` - **回滚指针**,指向这条记录的上一个版本。
201+
- `row_id`**隐藏的自增 ID**。如果数据表没有指定主键,InnoDB 会自动基于 `row_id` 产生一个聚簇索引。
202+
- `trx_id`**最近修改的事务 ID**。事务对某条聚簇索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里;
203+
- `roll_pointer`**回滚指针**,指向这条记录的上一个版本。
204204

205205
::: info UndoLog
206206
:::
@@ -216,10 +216,10 @@ MVCC 的多版本指的是多个版本的快照,快照存储在 UndoLog 中。
216216

217217
ReadView 有四个重要的字段:
218218

219-
- `m_ids` - 指的是在创建 ReadView 时,当前数据库中“活跃事务”的事务 ID 列表。注意:这是一个列表,**“活跃事务”指的就是,启动了但还没提交的事务**
220-
- `min_trx_id` - 指的是在创建 ReadView 时,当前数据库中“活跃事务”中事务 id 最小的事务,也就是 `m_ids` 的最小值。
221-
- `max_trx_id` - 这个并不是 m_ids 的最大值,而是指创建 ReadView 时当前数据库中应该给下一个事务分配的 ID 值,也就是全局事务中最大的事务 ID 值 + 1;
222-
- `creator_trx_id` - 指的是创建该 ReadView 的事务的事务 ID。
219+
- `m_ids`指的是在创建 ReadView 时,当前数据库中“活跃事务”的事务 ID 列表。注意:这是一个列表,**“活跃事务”指的就是,启动了但还没提交的事务**
220+
- `min_trx_id`指的是在创建 ReadView 时,当前数据库中“活跃事务”中事务 id 最小的事务,也就是 `m_ids` 的最小值。
221+
- `max_trx_id`这个并不是 m_ids 的最大值,而是指创建 ReadView 时当前数据库中应该给下一个事务分配的 ID 值,也就是全局事务中最大的事务 ID 值 + 1;
222+
- `creator_trx_id`指的是创建该 ReadView 的事务的事务 ID。
223223

224224
在创建 ReadView 后,我们可以将记录中的 trx_id 划分为三种情况:
225225

@@ -233,10 +233,10 @@ ReadView 有四个重要的字段:
233233
234234
一个事务去访问记录的时候,除了自己的更新记录总是可见之外,还有这几种情况:
235235

236-
- `trx_id == creator_trx_id` - 表示 `trx_id` 版本记录由 ReadView 所代表的当前事务产生,当然可以访问。
237-
- `trx_id < min_trx_id` - 表示 `trx_id` 版本记录是在创建 ReadView 之前已提交的事务生成的,当前事务可以访问。
238-
- `trx_id >= max_trx_id` - 表示 `trx_id` 版本记录是在创建 ReadView 之后才启动的事务生成的,当前事务不可以访问。
239-
- `min_trx_id <= trx_id < max_trx_id` - 需要判断 `trx_id` 是否在 `m_ids` 列表中
236+
- `trx_id == creator_trx_id`表示 `trx_id` 版本记录由 ReadView 所代表的当前事务产生,当然可以访问。
237+
- `trx_id < min_trx_id`表示 `trx_id` 版本记录是在创建 ReadView 之前已提交的事务生成的,当前事务可以访问。
238+
- `trx_id >= max_trx_id`表示 `trx_id` 版本记录是在创建 ReadView 之后才启动的事务生成的,当前事务不可以访问。
239+
- `min_trx_id <= trx_id < max_trx_id`需要判断 `trx_id` 是否在 `m_ids` 列表中
240240
- 如果 `trx_id``m_ids` 列表中,表示生成 `trx_id` 版本记录的事务依然活跃(未提交事务),当前事务不可以访问。
241241
- 如果 `trx_id` 不在 `m_ids` 列表中,表示生成 `trx_id` 版本记录的事务已提交,当前事务可以访问。
242242

docs/12.数据库/搜索引擎数据库/Elasticsearch/Elasticsearch_Mapping.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ PUT books/it/1
197197
198198
### 动态模板
199199
200-
**动态模板([dynamic templates](https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html)**是用于给 `mapping` 动态添加字段的自定义规则。
200+
[**动态模板(dynamic templates**](https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html) 是用于给 `mapping` 动态添加字段的自定义规则。
201201
202202
动态模板可以设置匹配条件,只有匹配的情况下才使用动态模板:
203203
@@ -266,14 +266,12 @@ Elasticsearch 提供了非常丰富的数据类型,官方将其分为以下几
266266
- [`nested`](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html):保留其子字段之间关系的 JSON 对象。
267267
- [`join`](https://www.elastic.co/guide/en/elasticsearch/reference/current/parent-join.html):为同一索引中的文档定义父/子关系。
268268
- **结构化数据类型**
269-
270269
- [Range](https://www.elastic.co/guide/en/elasticsearch/reference/current/range.html):范围类型,例如:`long_range``double_range``date_range``ip_range`
271270
- [`ip`](https://www.elastic.co/guide/en/elasticsearch/reference/current/ip.html):IPv4 和 IPv6 地址。
272271
- [`version`](https://www.elastic.co/guide/en/elasticsearch/reference/current/version.html):版本号。支持 [Semantic Versioning](https://semver.org/) 优先规则。
273272
- [`murmur3`](https://www.elastic.co/guide/en/elasticsearch/plugins/8.2/mapper-murmur3.html):计算并存储 hash 值。
274273
275274
- **聚合数据类型**
276-
277275
- [`aggregate_metric_double`](https://www.elastic.co/guide/en/elasticsearch/reference/current/aggregate-metric-double.html):预先聚合的指标值
278276
- [`histogram`](https://www.elastic.co/guide/en/elasticsearch/reference/current/histogram.html):直方图式的预聚合数值。
279277
@@ -288,7 +286,6 @@ Elasticsearch 提供了非常丰富的数据类型,官方将其分为以下几
288286
- [`rank_feature`](https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-feature.html):记录一个数字特征,为了在查询时提高命中率。
289287
- [`rank_features`](https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-features.html):记录多个数字特征,为了在查询时提高命中率。
290288
- **空间数据类型**
291-
292289
- [`geo_point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html):地理经纬度
293290
- [`geo_shape`](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-shape.html):复杂的形状,例如多边形
294291
- [`point`](https://www.elastic.co/guide/en/elasticsearch/reference/current/point.html):任意笛卡尔点
@@ -364,4 +361,4 @@ Elasticsearch 提供了以下映射参数:
364361
## 参考资料
365362
366363
- [Elasticsearch 官方文档之 Mapping](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html)
367-
- [Elasticsearch 从入门到实践之 Mapping](https://www.itshujia.com/read/elasticsearch/351.html)
364+
- [Elasticsearch 从入门到实践之 Mapping](https://www.itshujia.com/read/elasticsearch/351.html)

0 commit comments

Comments
 (0)