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)的时间也不需要那么久吧,怎么差那么多呢
是和三楼说的一样吗,我开始也觉得是这样,但是不敢确定 展开
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)的时间也不需要那么久吧,怎么差那么多呢
是和三楼说的一样吗,我开始也觉得是这样,但是不敢确定 展开
3个回答
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
建议可以先把(select max(id) from b)存到变量@P1中,然后执行select id from a where id>@P1
展开全部
就算不每次打开B库也会慢的,第一句属于直接比较,第二句要先打开B取得数据再比较
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看了一下执行计划,应该是只执行了一次
时间长的原因可能是因为oracle优化器在进行代价分析的时候,因为表数据很多,所以花费了非常多的时间.
时间长的原因可能是因为oracle优化器在进行代价分析的时候,因为表数据很多,所以花费了非常多的时间.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询