File tree Expand file tree Collapse file tree 2 files changed +20
-5
lines changed Expand file tree Collapse file tree 2 files changed +20
-5
lines changed Original file line number Diff line number Diff line change @@ -181,14 +181,19 @@ EXPLAIN 命令的extra一栏中有Using index condition,表明使用了索引
181
181
182
182
` select * from table limit 10 ` 和 ` select * from table limit 10000, 10 ` 的查询时间是不一样的,后者是查询出 10010 条,再取最后 10 条记录。
183
183
184
- 本质原因就是:偏移量(offset)越大,mysql就会扫描越多的行,然后再抛弃掉。这样就导致查询性能的下降。
184
+ 本质原因就是:每次查询时扫描整张表(不走索引), 偏移量(offset)越大,mysql就会扫描越多的行,然后再抛弃掉。这样就导致查询性能的下降。
185
185
186
186
解决方案:
187
187
1 . 标签记录法,使用 ` select * from table where id > 10000 limit 10 ` ,
188
188
2 . 范围查询,使用 ` select * from table where id between 100000 and 100010 order by id desc; `
189
189
3 . 使用子查询,把条件转移到主键索引树,使用 ` select * from table where id >= (select a.id from table a where a.update_time >= xxx limit 100000, 1) limit 10 `
190
190
4 . INNER JOIN 延迟关联,与上述的子查询思路类似,将条件转移到主键索引树
191
- 5 . 尽量满足索引覆盖,效率低下是因为回表次数过多,如果可以满足索引覆盖,则就不需要回表
191
+ 5 . 尽量满足索引覆盖
192
+
193
+ ## 单表数据量大了性能为什么下降
194
+
195
+ 因为表的数量达到一定量级后,MySQL 内存无法存储所有的索引,使得查询语句需要产生磁盘IO,导致性能下降。
196
+
192
197
193
198
## ACID 原则
194
199
- Atomicity(原子性),每次事务是原子的,事务包含的所有操作要么全部成功,要么全部不执行。一旦有操作失败,则需要回退状态到执行事务之前;通过 undo log 来保证。
Original file line number Diff line number Diff line change @@ -131,9 +131,19 @@ Prototype(原型)对象和单例对象的区别:
131
131
132
132
事务的几个参数:rollbackFor,propagation,isolation
133
133
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 )
137
147
138
148
### 事务失效
139
149
You can’t perform that action at this time.
0 commit comments