请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师为什么 update 更新语句也会使用到相关子查询呢

这里有点困惑:
update t_tmp set sal = 10000 where
deptno = (select deptno from t_dept where dname = “sales”)

我翻译一下子查询的步骤,麻烦老师看看合适么:每次都取 t_tmp 表中的一行数据带到子查询里面,然后子查询出合适的 deptno 后,还要对比一下该 deptno 看看和 t_tmp 表中当前这一行的 deptno 相等不相等,相等才更新。这算是一次子查询,而这里总计会执行 t_tmp 表中总行数的子查询次数,请问是这个意思吗?

正在回答 回答被采纳积分+3

2回答

神思者 2020-08-02 21:11:53

只要是where子句的子查询都是相关子查询,跟缓存没关系。这条update语句可以写成表连接的语法,把子查询当成临时表做连接就效率高了很多。你百度一下update语句的表连接,这个写法是高效的

1 回复 有任何疑惑可以回复我~
提问者 小学生6年级 2020-08-02 20:44:31

而其他有缓存优化的,也是按顺序执行,只不过第一次执行以后,子查询的结果集被缓存下来,之后每次直接去结果集中取。我的理解是这样的,请问老师合适么?  如果是的话,为什么不做引擎 ast 解析优化,让子查询先来?    


本人是非科班的前端,在数据库这方面比较薄弱,这里向老师请教一下。。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信