Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/database/mysql/how-sql-executed-in-mysql.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ select * from tb_student A where A.age='18' and A.name=' 张三 ';

结合上面的说明,我们分析下这个语句的执行流程:

- 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 SQL 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
- 先通过连接器进行身份认证和权限获取(若认证失败则直接拒绝),在 MySQL8.0 版本以前,认证通过后会先查询缓存,以这条 SQL 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
- 通过分析器进行词法分析,提取 SQL 语句的关键元素,比如提取上面这个语句是查询 select,提取需要查询的表名为 tb_student,需要查询所有的列,查询条件是这个表的 id='1'。然后判断这个 SQL 语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
- 接下来就是优化器进行确定执行方案,上面的 SQL 语句,可以有两种执行方案:a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是 18。b.先找出学生中年龄 18 岁的学生,然后再查询姓名为“张三”的学生。那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。那么确认了执行计划后就准备开始执行了。

Expand Down
2 changes: 1 addition & 1 deletion docs/java/concurrent/aqs.md
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ AQS 定义两种资源共享方式:`Exclusive`(独占,只有一个线程
| **并发度** | 同一时刻只有一个线程能获取到资源 | 同一时刻可以有多个线程同时获取到资源 |
| **获取资源入口** | `acquire(int arg)` | `acquireShared(int arg)` |
| **释放资源入口** | `release(int arg)` | `releaseShared(int arg)` |
| **需要重写的模板方法** | `tryAcquire(int)` / `tryRelease(int)` | `tryAcquireShared(int)` / `tryReleaseShared(int)` |
| **需要重写的模板方法** | `tryAcquire(int)` / `tryRelease(int)` | `tryAcquireShared(int)` / `tryReleaseShared(boolean)` |
| **tryXxx 返回值** | `boolean`,`true` 表示获取/释放成功 | `int`(获取时),负数表示失败,0 表示成功但无剩余资源,正数表示成功且有剩余资源;`boolean`(释放时) |
| **唤醒后继节点** | 释放资源时唤醒一个后继节点 | 获取资源成功后,如果还有剩余资源,会继续唤醒后续节点(传播唤醒) |
| **Node 类型标识** | `Node.EXCLUSIVE`(`null`) | `Node.SHARED`(一个静态的 `Node` 实例) |
Expand Down
Loading