5
回答
Oracle里 多表连接查询 多次嵌套查询 效率比较?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

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

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