Skip to content

Commit e6a9412

Browse files
20241111
1 parent 0655466 commit e6a9412

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

_posts/2022-06-22-mysql.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,19 @@ EXPLAIN 命令的extra一栏中有Using index condition,表明使用了索引
181181

182182
`select * from table limit 10``select * from table limit 10000, 10` 的查询时间是不一样的,后者是查询出 10010 条,再取最后 10 条记录。
183183

184-
本质原因就是:偏移量(offset)越大,mysql就会扫描越多的行,然后再抛弃掉。这样就导致查询性能的下降。
184+
本质原因就是:每次查询时扫描整张表(不走索引),偏移量(offset)越大,mysql就会扫描越多的行,然后再抛弃掉。这样就导致查询性能的下降。
185185

186186
解决方案:
187187
1. 标签记录法,使用 `select * from table where id > 10000 limit 10`
188188
2. 范围查询,使用 `select * from table where id between 100000 and 100010 order by id desc;`
189189
3. 使用子查询,把条件转移到主键索引树,使用 `select * from table where id >= (select a.id from table a where a.update_time >= xxx limit 100000, 1) limit 10`
190190
4. INNER JOIN 延迟关联,与上述的子查询思路类似,将条件转移到主键索引树
191-
5. 尽量满足索引覆盖,效率低下是因为回表次数过多,如果可以满足索引覆盖,则就不需要回表
191+
5. 尽量满足索引覆盖
192+
193+
## 单表数据量大了性能为什么下降
194+
195+
因为表的数量达到一定量级后,MySQL 内存无法存储所有的索引,使得查询语句需要产生磁盘IO,导致性能下降。
196+
192197

193198
## ACID 原则
194199
- Atomicity(原子性),每次事务是原子的,事务包含的所有操作要么全部成功,要么全部不执行。一旦有操作失败,则需要回退状态到执行事务之前;通过 undo log 来保证。

_posts/2023-08-11-springboot.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,19 @@ Prototype(原型)对象和单例对象的区别:
131131

132132
事务的几个参数:rollbackFor,propagation,isolation
133133

134-
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的区别:
135-
- PROPAGATION_REQUIRES_NEW:内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚,两个事务互不影响。
136-
- PROPAGATION_NESTED:外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚。
134+
### 传播机制
135+
共有七种传播机制,大致上分为三类:
136+
1. 支持当前事务
137+
1. REQUIRED:如果存在当前事务,加入该事务,否则创建新事务执行
138+
2. SUPPORTS:如果存在当前事务,加入该事务,否则以非事务的方式执行
139+
3. MANDATORY:如果存在当前事务,加入该事务,否则抛出异常
140+
2. 不支持当前事务
141+
1. REQUIRES_NEW:如果存在当前事务,暂时挂起该事务,并且创建新事物执行。**内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚,两个事务互不影响。**
142+
2. NOT_SUPPORTED:如果存在当前事务,暂时挂起该事务,否则以非事务的方式执行
143+
3. NEVER:如果存在当前事务,抛出异常,否则以非事务的方式运行
144+
3. 嵌套事务(NESTED):如果存在当前事务,则创建新事物作为当前事务的嵌套事务执行,否则等价于REQUIRED。**外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚。**
145+
146+
![](https://raw.githubusercontent.com/CompetitiveLin/ImageHostingService/picgo/imgs/202411111929924.png)
137147

138148
### 事务失效
139149

0 commit comments

Comments
 (0)