Skip to content

Commit 4a7852b

Browse files
committed
Update Java Notes
1 parent 3f38376 commit 4a7852b

File tree

1 file changed

+46
-6
lines changed

1 file changed

+46
-6
lines changed

DB.md

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,12 @@ SELECT * FROM t WHERE id = 1;
573573

574574
##### 扫描行数
575575

576-
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。找到一个最优的执行方案,用最小的代价去执行语句
576+
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
577+
578+
* 根据搜索条件找出所有可能的使用的索引
579+
* 计算全表扫描的代价
580+
* 计算使用不同索引执行 SQL 的的代价
581+
* 找到一个最优的执行方案,用最小的代价去执行语句
577582

578583
在数据库里面,扫描行数是影响执行代价的因素之一,扫描的行数越少意味着访问磁盘的次数越少,消耗的 CPU 资源越少,优化器还会结合是否使用临时表、是否排序等因素进行综合判断
579584

@@ -1190,13 +1195,12 @@ LIMIT <limit_params>
11901195
SELECT 列名1,列名2,... FROM 表名;
11911196
```
11921197

1193-
* 去除重复查询
1194-
注意:只有值全部重复的才可以去除
1195-
1198+
* 去除重复查询:只有值全部重复的才可以去除,需要创建临时表辅助查询
1199+
11961200
```mysql
11971201
SELECT DISTINCT 列名1,列名2,... FROM 表名;
11981202
```
1199-
1203+
12001204
* 计算列的值(四则运算)
12011205

12021206
```mysql
@@ -2012,7 +2016,7 @@ WHERE
20122016

20132017
#### 内连接
20142018

2015-
查询原理:内连接查询的是两张表有交集的部分数据
2019+
查询原理:内连接查询的是两张表有交集的部分数据,分为驱动表和被驱动表,首先查询驱动表得到结果集,然后根据结果集中的每一条记录都分别到被驱动表中查找匹配
20162020

20172021
* 显式内连接
20182022

@@ -4671,6 +4675,42 @@ CREATE INDEX idx_area ON table_name(area(7));
46714675

46724676

46734677

4678+
****
4679+
4680+
4681+
4682+
#### 索引合并
4683+
4684+
使用多个索引来完成一次查询的执行方法叫做索引合并 index merge
4685+
4686+
* Intersection 索引合并:
4687+
4688+
```sql
4689+
SELECT * FROM table_test WHERE key1 = 'a' AND key3 = 'b'; # key1 和 key3 列都是单列索引、二级索引
4690+
```
4691+
4692+
从不同索引中扫描到的记录的 id 值取交集(相同 id),然后执行回表操作,要求从每个二级索引获取到的记录都是按照主键值排序
4693+
4694+
* Union 索引合并:
4695+
4696+
```sql
4697+
SELECT * FROM table_test WHERE key1 = 'a' OR key3 = 'b';
4698+
```
4699+
4700+
从不同索引中扫描到的记录的 id 值取并集,然后执行回表操作,要求从每个二级索引获取到的记录都是按照主键值排序
4701+
4702+
* Sort-Union 索引合并
4703+
4704+
```sql
4705+
SELECT * FROM table_test WHERE key1 < 'a' OR key3 > 'b';
4706+
```
4707+
4708+
先将从不同索引中扫描到的记录的主键值进行排序,再按照 Union 索引合并的方式进行查询
4709+
4710+
4711+
4712+
4713+
46744714

46754715

46764716
***

0 commit comments

Comments
 (0)