暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL执行速度取决于查询中的换行符

askTom 2017-08-02
368

问题描述

亲爱的汤姆,

如果我在蟾蜍中执行如下查询:
选择 *
来自somechema.TABLE_A A
在B.A_ID = A.A_ID上加入一些切马表B
在A.C_ID = C.C_ID上加入某些化学2.table _c C
在B.D _ id = D.D _ id上加入一些切美表D D
其中C.C_ID = 1234;

查询结果在不到一秒钟的时间内返回。
如果我现在执行查询:
选择 *来自somechema.TABLE_A A
在B.A_ID = A.A_ID上加入一些切马表B
在A.C_ID = C.C_ID上加入某些化学2.table _c C
在B.D _ id = D.D _ id上加入一些切美表D D
其中C.C_ID = 1234;

查询结果在大约45秒内返回。这两个查询之间的唯一区别是 * 和从之间的换行符。

结果是可重复的。

你知道为什么会发生这种情况吗?

谢谢!

专家解答

试试这个-运行每个提示如下

select /*+ gather_plan_statistics */ * 
from SOMESCHEMA.TABLE_A A
join SOMESCHEMA.TABLE_B B on B.A_ID = A.A_ID
join SOMESCHEMA2.TABLE_C C on A.C_ID = C.C_ID
join SOMESCHEMA.TABLE_D D on B.D_ID = D.D_ID
where C.C_ID = 1234;

select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

select /*+ gather_plan_statistics */ * from SOMESCHEMA.TABLE_A A
join SOMESCHEMA.TABLE_B B on B.A_ID = A.A_ID
join SOMESCHEMA2.TABLE_C C on A.C_ID = C.C_ID
join SOMESCHEMA.TABLE_D D on B.D_ID = D.D_ID
where C.C_ID = 1234;

select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'))


可能会产生不同的计划。

在此处发布带有代码标签的dbms_xplan的输出,我们可以看看
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论