有一句蛮长的sql,查询得非常慢,但是加了一句union all之后速度从六分钟变成了十秒,但是我实在不理解为何会这样。具体的sql语句如下图
当我在该sql语句的B部分中加了一条无关紧要的union all之后,速度从上图的六分钟变成了十秒这里A部分和B部分单独拿出来查询,速度都很快只用几秒,当他们连接查询的时候就变得非常慢,但是加了一句union all之后速度就提升了数十倍。实在搞不懂为何会这样,求大神指导一下,左连接在从表里面加一句union all会使速度变快的原因
当我在该sql语句的B部分中加了一条无关紧要的union all之后,速度从上图的六分钟变成了十秒这里A部分和B部分单独拿出来查询,速度都很快只用几秒,当他们连接查询的时候就变得非常慢,但是加了一句union all之后速度就提升了数十倍。实在搞不懂为何会这样,求大神指导一下,左连接在从表里面加一句union all会使速度变快的原因
Db_Model.Rix_No
Db_Matrix.Rix_No
我将这两个数据库比作数据库X和数据库Y,当我将这句sql放在数据库X中时,不加Union all他执行得也很快,但是将这句sql放在数据库Y中,执行得就很慢,需要注意的是,X数据库内的资料量要比Y数据库的资料量要大,却导致了数据量少的数据库Y反而查询更慢。且两个不同数据库相同的sql的执行计划不一样,后来我在数据库Y的sql中加入union all之后,执行计划就和数据库X变得一样了不同数据库,相同的表结构,同一sql语句的执行计划不一样
在oracle下,你加个无关紧要的union all查询不至于出现这种情况,除非是缓存影响,从第一次几分钟到第二次第三次几秒钟是有可能的,但也与你加不加这个union all查询无关