有一句蛮长的sql,查询得非常慢,但是加了一句union all之后速度从六分钟变成了十秒,但是我实在不理解为何会这样。具体的sql语句如下图
当我在该sql语句的B部分中加了一条无关紧要的union all之后,速度从上图的六分钟变成了十秒这里A部分和B部分单独拿出来查询,速度都很快只用几秒,当他们连接查询的时候就变得非常慢,但是加了一句union all之后速度就提升了数十倍。实在搞不懂为何会这样,求大神指导一下,左连接在从表里面加一句union all会使速度变快的原因

解决方案 »

  1.   

    请检查这2个字段的数据类型是什么? 如果不一致,可能导致A left join B时性能不佳.
    Db_Model.Rix_No
    Db_Matrix.Rix_No
      

  2.   

    建议查看SQL实际执行计划, 看主要成本在哪个环节.
      

  3.   

    这件事情是发生在两个数据库中,这两个数据库里面的表结构都是一样的,但里面的资料有或许差别
    我将这两个数据库比作数据库X和数据库Y,当我将这句sql放在数据库X中时,不加Union all他执行得也很快,但是将这句sql放在数据库Y中,执行得就很慢,需要注意的是,X数据库内的资料量要比Y数据库的资料量要大,却导致了数据量少的数据库Y反而查询更慢。且两个不同数据库相同的sql的执行计划不一样,后来我在数据库Y的sql中加入union all之后,执行计划就和数据库X变得一样了不同数据库,相同的表结构,同一sql语句的执行计划不一样
      

  4.   

    你是在数据库工具中执行的与吧,不加UNION ALL 的时候,是不是会有很多数据,查询后,只显示前边的几条。如果是加完UNION ALL后,是不是会显示你加的那个UNION ALL 。
      

  5.   

    这不是oracle吧?
    在oracle下,你加个无关紧要的union all查询不至于出现这种情况,除非是缓存影响,从第一次几分钟到第二次第三次几秒钟是有可能的,但也与你加不加这个union all查询无关
      

  6.   

    这个是sql server不是oracle,sql server版块太冷清了,所以移到oracle这边问问
      

  7.   

    在oracle我确实没有遇到这种问题,这个是sql server
      

  8.   

    这个是sql server,整个查询语句只有两百多数据,不加union all查询出数据到所有数据加载完毕之后需要6分钟,加了之后只有十几秒,且加不加union all查询出来的结果是一样的