Oracle里 多表连接查询 多次嵌套查询 效率比较?

fancyguys 发布于 2016/06/25 11:15
阅读 1K+
收藏 0

如题 情景是 查询结果依赖于多张表中的字段判断 多张表中互相通过流水号标记,多张表都是数据量很大的那种

我的问题是,是把这些表都通过流水号连起来,然后取出结果比较快,还是用嵌套查询,一层一层判断,然后取出流水号用where in查询比较快?我记得之前查资料和做实验都是嵌套查询比较快,但是前几天有人跟我说连接快,我就去又百度了下,发现咋说的都有= =求解!!

加载中
2
IdleMan
IdleMan
没有执行计划的调优都是耍流氓
乌龟壳
乌龟壳
查询计划是根,not in, exists, 嵌套,连接等不同写法是枝叶。根只有十几个知识点,但是有点深度。枝叶成百上千的变化,虽然看似好理解(用嵌套快),实际脱离上下文啥都不是。
0
卧枝会中田
卧枝会中田
用DB 执行计划 执行SQL 看执行计划 分析 你这百度也好臆断也好没意义 不同的SQL比较 看看分析结果不就一目了然了?
卧枝会中田
卧枝会中田
我觉得你可能不懂 执行计划是什么 如果不懂你可以百度查查
f
fancyguys
手边没oracle没数据啊= =我感觉这个问题不应该是那种能盖棺定论的么 都具体问题具体分析不能每次写都写两种然后测哪个好用用哪个吧
0
ToBeHJH
ToBeHJH
这问题提供的信息太少,判断一个SQL语句的性能,要综合原始需求、SQL文本/执行计划、表结构(索引情况)、表大小等信息
ToBeHJH
ToBeHJH
回复 @fancyguys : 只要SQL写的不别扭,该走索引的列上有索引,基本不会有什么大问题
f
fancyguys
回复 @ToBeHJH : 最终返回量不确定,可能是0或者万,有过滤条件,之前的连接都是flownumber=flownumber这样写的,流水号上没索引~意思是我只要按我想的写就行了,出了慢的问题再具体研究么= =这样好别扭啊
ToBeHJH
ToBeHJH
回复 @fancyguys : 还有这些问题呢 1.最终返回多少数据量 2.SQL语句是否有过滤条件 3.在流水号上是否存在索引 另外,Oracle的优化器也比较智能了,你用连接的方式写好SQL后,它会根据统计信息、索引等信息决定采用嵌套连接(和你说的“嵌套查询”不是同一个意思)还是哈希连接。
f
fancyguys
需求这两种方法都能满足,没索引,每个表字段10左右,数据量每个表差不多都是百万条
0
有梦为嘛
有梦为嘛
上面说的是,得看执行计划,我之前遇到同一SQL语句在开发环境很快,到生产环境巨慢,执行计划完全不一样,如果嵌套的表数据量也很大,估计没有连接快。
maradona
maradona
当年也遇到过,本地测试环境飞快,生产慢成狗
0
快速开发师
快速开发师
那要看那个多表链接生成的SQL是不是真的使用了join!
返回顶部
顶部