如题,今天在写SQL的时候遇到一个非常怪的问题,总共只有4000条记录的一个查询语句整整执行了12分钟,这让人无法忍受!所以特地的explain了一下,结果如下图  我诧异的发现图中竟然出现了meger join outer并且耗时在16K左右,再仔细往里面看发现耗时的主要原因就是buffer sort,百度、谷歌了一下都没有我中意的答案,有没有大哥碰到过类似的问题,给我解答一下,不甚感激。oracle 版本为11.0.4.0

解决方案 »

  1.   

    看到很多cost为0的操作,先把涉及到的表与索引的统计信息收集一遍再看计划。
      

  2.   

    1、看不到楼主整个计划的全貌,因此,也不能详细的确认和分析,但个人认为buffer sort的cost可能是错的,那个节点的cost应该很低;
    2、整个SQL可能包含多个子SQL形成的union all,主要的cost应该在头两个子SQL,而第二个子SQL的cost主要消耗在其中的一个NL节点上,而非buffer sort节点,具体如图红线所示。
      

  3.   

    不好意思,我也不知道怎么编辑已经发出的帖子,只能再发一楼,干脆说下第一个子SQL的瓶颈点,和上面回帖中的第二个子SQL类似,也是一个NL节点,具体如图中红线所示。