select id from a where id>100与select id from a where id>(select max(id) from b)的执行效率差很多

两条sql语句selectidfromawhereid>100与selectidfromawhereid>(selectmax(id)fromb)的执行效率差很多,前面执... 两条sql语句
select id from a where id>100与select id from a where id>(select max(id) from b)的执行效率差很多,前面执行时间1秒,后面执行时间几分钟,两个表的数据都是千万级的
数据库是oracle。
我的疑虑是,是不是每次从a中去一条数据是都执行(select max(id) from b) 来取得b中的最大id,每去一条数据就执行一次这个,因为a表中数据有千万条,所以(select max(id) from b) 要执行很多次,导致变慢了,谁知道这个原理吗,给解释一下,高分相送
就算慢的话,从b中区max(id)的时间也不需要那么久吧,怎么差那么多呢

是和三楼说的一样吗,我开始也觉得是这样,但是不敢确定
展开
 我来答
匿名用户
2010-12-25
展开全部
可以认为maxx=(select max(id) from b)是一个函数,每次获取maxx值时,都会调用一次这个函数,如果两个表各有1000条数据,那么系统就需要查询判断1000×1000次。
建议可以先把(select max(id) from b)存到变量@P1中,然后执行select id from a where id>@P1
百度网友6efbdae
2010-12-24 · TA获得超过101个赞
知道小有建树答主
回答量:125
采纳率:0%
帮助的人:99.5万
展开全部
就算不每次打开B库也会慢的,第一句属于直接比较,第二句要先打开B取得数据再比较
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tpj_wow
2010-12-25 · TA获得超过532个赞
知道小有建树答主
回答量:232
采纳率:100%
帮助的人:291万
展开全部
我看了一下执行计划,应该是只执行了一次
时间长的原因可能是因为oracle优化器在进行代价分析的时候,因为表数据很多,所以花费了非常多的时间.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式