Skip to content

Commit 157d49d

Browse files
committed
update docs
1 parent 53f78a3 commit 157d49d

File tree

10 files changed

+205
-326
lines changed

10 files changed

+205
-326
lines changed

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
- [Mysql 索引](docs/sql/mysql/mysql-index.md)
3030
- [Mysql 锁](docs/sql/mysql/mysql-lock.md)
3131
- [Mysql 事务](docs/sql/mysql/mysql-transaction.md)
32-
- [Mysql 优化](docs/sql/mysql/mysql-optimization.md)
32+
- [Mysql 性能优化](docs/sql/mysql/mysql-optimization.md)
3333
- [Mysql 运维](docs/sql/mysql/mysql-ops.md) 🔨
3434
- [Mysql 配置](docs/sql/mysql/mysql-config.md)
3535
- [H2 入门指南](docs/sql/h2.md)
@@ -73,8 +73,6 @@
7373

7474
## 📚 资料
7575

76-
- [《SQL 必知必会》](https://item.jd.com/11232698.html)
77-
7876
- **Mysql**
7977
- **官方**
8078
- [Mysql 官网](https://www.mysql.com/)
Binary file not shown.
File renamed without changes.
File renamed without changes.

docs/README.md

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
3030
- [Mysql 索引](sql/mysql/mysql-index.md)
3131
- [Mysql 锁](sql/mysql/mysql-lock.md)
3232
- [Mysql 事务](sql/mysql/mysql-transaction.md)
33-
- [Mysql 优化](sql/mysql/mysql-optimization.md)
33+
- [Mysql 性能优化](sql/mysql/mysql-optimization.md)
3434
- [Mysql 运维](sql/mysql/mysql-ops.md) 🔨
3535
- [Mysql 配置](sql/mysql/mysql-config.md)
3636
- [H2 入门指南](sql/h2.md)
@@ -42,17 +42,30 @@ footer: CC-BY-SA-4.0 Licensed | Copyright © 2018-Now Dunwu
4242
> [Nosql 数据库](nosql) 整理主流 Nosql 数据库知识点。
4343
4444
- [Nosql 技术选型](nosql/nosql-selection.md)
45-
- [Redis](nosql/redis) 📚
46-
- [Redis 面试总结](nosql/redis/redis-interview.md) 💯
47-
- [Redis 入门指南](nosql/redis/redis-quickstart.md)
48-
- [Redis 数据类型和应用](nosql/redis/redis-datatype.md)
49-
- [Redis 持久化](nosql/redis/redis-persistence.md)
50-
- [Redis 复制](nosql/redis/redis-replication.md)
51-
- [Redis 哨兵](nosql/redis/redis-sentinel.md)
52-
- [Redis 集群](nosql/redis/redis-cluster.md)
53-
- [Redis 事务](nosql/redis/redis-transaction.md)
54-
- [Redis 发布与订阅](nosql/redis/redis-pub-sub.md)
55-
- [Redis 运维](nosql/redis/redis-ops.md) 🔨
45+
46+
#### Redis
47+
48+
> [Redis](nosql/redis) 📚
49+
50+
- [Redis 面试总结](nosql/redis/redis-interview.md) 💯
51+
- [Redis 入门指南](nosql/redis/redis-quickstart.md)
52+
- [Redis 数据类型和应用](nosql/redis/redis-datatype.md)
53+
- [Redis 持久化](nosql/redis/redis-persistence.md)
54+
- [Redis 复制](nosql/redis/redis-replication.md)
55+
- [Redis 哨兵](nosql/redis/redis-sentinel.md)
56+
- [Redis 集群](nosql/redis/redis-cluster.md)
57+
- [Redis 事务](nosql/redis/redis-transaction.md)
58+
- [Redis 发布与订阅](nosql/redis/redis-pub-sub.md)
59+
- [Redis 运维](nosql/redis/redis-ops.md) 🔨
60+
61+
#### HBase
62+
63+
> [HBase](https://dunwu.github.io/bigdata-tutorial/hbase) 📚 因为常用于大数据项目,所以将其文档和源码整理在 [bigdata-tutorial](https://dunwu.github.io/bigdata-tutorial/) 项目中。
64+
65+
- [HBase 应用指南](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/hbase-quickstart.md)
66+
- [HBase 命令](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/hbase-cli.md)
67+
- [HBase Java API](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/hbase-api.md)
68+
- [HBase 配置](https://github.com/dunwu/bigdata-tutorial/blob/master/docs/hbase/hbase-ops.md)
5669

5770
### 中间件
5871

docs/sql/README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414

1515
### [Mysql](mysql/README.md)
1616

17-
- [Mysql 原理](mysql/mysql-theory.md)
18-
- [Mysql 运维 🔨](mysql/mysql-ops.md)
17+
- [Mysql 基本原理](mysql/mysql-theory.md)
18+
- [Mysql 索引](mysql/mysql-index.md)
19+
- [Mysql 锁](mysql/mysql-lock.md)
20+
- [Mysql 事务](mysql/mysql-transaction.md)
21+
- [Mysql 性能优化](mysql/mysql-optimization.md)
22+
- [Mysql 运维](mysql/mysql-ops.md) 🔨
1923
- [Mysql 配置](mysql/mysql-config.md)
20-
- Mysql 索引
21-
- Mysql 锁
2224

2325
### 其他关系型数据库
2426

@@ -36,7 +38,7 @@
3638
- [《高性能 MySQL》](https://item.jd.com/11220393.html) - Mysql 经典
3739
- [《SQL 必知必会》](https://item.jd.com/11232698.html) - SQL 入门
3840
- **教程**
39-
- [runoob.com MySQL 教程](http://www.runoob.com/mysql/mysql-tutorial.html) - 入门级 SQL 教程
41+
- [runoob.com MySQL 教程](http://www.runoob.com/mymysql-tutorial.html) - 入门级 SQL 教程
4042
- [mysql-tutorial](https://github.com/jaywcjlove/mysql-tutorial)
4143
- **更多资源**
4244
- [awesome-mysql](https://github.com/jobbole/awesome-mysql-cn)

docs/sql/mysql/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,17 @@
66
- [Mysql 索引](mysql-index.md)
77
- [Mysql 锁](mysql-lock.md)
88
- [Mysql 事务](mysql-transaction.md)
9-
- [Mysql 优化](mysql-optimization.md)
9+
- [Mysql 性能优化](mysql-optimization.md)
1010
- [Mysql 运维](mysql-ops.md) 🔨
1111
- [Mysql 配置](mysql-config.md)
1212

13+
------
14+
15+
关系型数据库基本知识:
16+
17+
- [关系型数据库面试总结](https://github.com/dunwu/db-tutorial/blob/master/docs/sql/sql-interview.md) 💯
18+
- [SQL Cheat Sheet](https://github.com/dunwu/db-tutorial/blob/master/docs/sql/sql-cheat-sheet.md)
19+
1320
## 📚 资料
1421

1522
- **官方**

docs/sql/mysql/mysql-index.md

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,13 @@ MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数
263263

264264
必须使用 GIS 相关的函数来维护数据。
265265

266-
## 、聚簇索引
266+
## 、聚簇索引
267267

268-
聚簇索引不是一种单独的索引类型,而是一种数据存储方式。
268+
聚簇索引不是一种单独的索引类型,而是一种数据存储方式。聚簇表示数据行和相邻的键紧凑地存储在一起。具体细节依赖于实现方式。如 **InnoDB 的聚簇索引实际是在同一个结构中保存了 B 树的索引和数据行**
269269

270-
聚簇表示数据行和相邻的键紧凑地存储在一起。
270+
**聚簇表示数据行和相邻的键值紧凑地存储在一起,因为数据紧凑,所以访问快**。因为无法同时把数据行存放在两个不同的地方,所以**一个表只能有一个聚簇索引**
271+
272+
若没有定义主键,InnoDB 会隐式定义一个主键来作为聚簇索引。
271273

272274
- **聚集索引**(`Clustered`):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个。
273275
- **非聚集索引**(`Non-clustered`):非聚集索引指定表的逻辑顺序,也可以视为二级索引。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于 249 个。
@@ -278,21 +280,21 @@ MyISAM 存储引擎支持空间数据索引(R-Tree),可以用于地理数
278280

279281
如果没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
280282

281-
## 、索引的策略
283+
## 、索引的策略
282284

283285
### 索引基本原则
284286

285287
- 索引不是越多越好,不要为所有列都创建索引。
286-
- 要尽量避免冗余和重复索引
287-
- 要考虑删除未使用的索引
288-
- 尽量的扩展索引,不要新建索引
289-
- 频繁作为 `WHERE` 过滤条件的列应该考虑添加索引
288+
- 要尽量避免冗余和重复索引
289+
- 要考虑删除未使用的索引
290+
- 尽量的扩展索引,不要新建索引
291+
- 频繁作为 `WHERE` 过滤条件的列应该考虑添加索引
290292

291293
### 独立的列
292294

293-
**如果查询中的列不是独立的列,则数据库不会使用索引**
295+
**“独立的列” 是指索引列不能是表达式的一部分,也不能是函数的参数**
294296

295-
“独立的列” 是指索引列不能是表达式的一部分,也不能是函数的参数
297+
如果查询中的列不是独立的列,则数据库不会使用索引
296298

297299
❌ 错误示例:
298300

@@ -327,22 +329,6 @@ SELECT COUNT(*) AS cnt, LEFT(city, 3) AS pref FROM sakila.city_demo
327329
GROUP BY city ORDER BY cnt DESC LIMIT 10;
328330
```
329331

330-
### 多列索引
331-
332-
**不要为每个列都创建独立索引**
333-
334-
**将选择性高的列或基数大的列优先排在多列索引最前列**。但有时,也需要考虑 WHERE 子句中的排序、分组和范围条件等因素,这些因素也会对查询性能造成较大影响。
335-
336-
举例来说,有一张 user 表,其中含 name, sex, age 三个列,如果将这三者组合为多列索引,应该用什么样的顺序呢?从选择性高的角度来看:`name > age > sex`
337-
338-
### 聚簇索引
339-
340-
聚簇索引不是一种单独的索引类型,而是一种数据存储方式。具体细节依赖于实现方式。如 **InnoDB 的聚簇索引实际是在同一个结构中保存了 B 树的索引和数据行**
341-
342-
**聚簇表示数据行和相邻的键值紧凑地存储在一起,因为数据紧凑,所以访问快**。因为无法同时把数据行存放在两个不同的地方,所以**一个表只能有一个聚簇索引**
343-
344-
若没有定义主键,InnoDB 会隐式定义一个主键来作为聚簇索引。
345-
346332
### 覆盖索引
347333

348334
索引包含所有需要查询的字段的值。
@@ -353,7 +339,7 @@ GROUP BY city ORDER BY cnt DESC LIMIT 10;
353339
- 一些存储引擎(例如 MyISAM)在内存中只缓存索引,而数据依赖于操作系统来缓存。因此,只访问索引可以不使用系统调用(通常比较费时)。
354340
- 对于 InnoDB 引擎,若辅助索引能够覆盖查询,则无需访问主索引。
355341

356-
### 使用索引扫描来做排序
342+
### 使用索引来排序
357343

358344
Mysql 有两种方式可以生成排序结果:通过排序操作;或者按索引顺序扫描。
359345

@@ -367,6 +353,10 @@ MySQL 会一直向右匹配直到遇到范围查询 `(>,<,BETWEEN,LIKE)` 就停
367353
- 如果是联合索引,那么 key 也由多个列组成,同时,索引只能用于查找 key 是否**存在(相等)**,遇到范围查询(>、<、between、like 左匹配)等就**不能进一步匹配**了,后续退化为线性查找。
368354
- 因此,**列的排列顺序决定了可命中索引的列数**
369355

356+
**不要为每个列都创建独立索引**
357+
358+
**将选择性高的列或基数大的列优先排在多列索引最前列**。但有时,也需要考虑 `WHERE` 子句中的排序、分组和范围条件等因素,这些因素也会对查询性能造成较大影响。
359+
370360
例如:`a = 1 and b = 2 and c > 3 and d = 4`,如果建立(a,b,c,d)顺序的索引,d 是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d 的顺序可以任意调整。
371361

372362
让选择性最强的索引列放在前面,索引的选择性是指:不重复的索引值和记录总数的比值。最大值为 1,此时每个记录都有唯一的索引与其对应。选择性越高,查询效率也越高。
@@ -388,7 +378,7 @@ customer_id_selectivity: 0.0373
388378

389379
### = 和 in 可以乱序
390380

391-
**不需要考虑=、in 等的顺序**,Mysql 会自动优化这些条件的顺序,以匹配尽可能多的索引列。
381+
**不需要考虑 `=``IN` 等的顺序**,Mysql 会自动优化这些条件的顺序,以匹配尽可能多的索引列。
392382

393383
例子:如有索引(a, b, c, d),查询条件 c > 3 and b = 2 and a = 1 and d < 4 与 a = 1 and c > 3 and b = 2 and d < 4 等顺序都是可以的,MySQL 会自动优化为 a = 1 and b = 2 and c > 3 and d < 4,依次命中 a、b、c。
394384

0 commit comments

Comments
 (0)