用left join 很快就可以出来查询的数据。
但是改成full join 就很慢。等个十几分钟都执行不完。不知道是数据库还是查询语句的问题。oracle的数据库。
希望大家能给点建议。有必要的话我可以把查询语句贴出来。

解决方案 »

  1.   

    full join速度慢 是正常的。
    如果不是需求必要,使用其他方法看看
      

  2.   


     非常感谢。我觉得也是很有这个可能,只是我查的表是这样子的    (select *........) A   full join  (select *......) B      查出来的A  和 B 都是很少的数据量了。只是得到 A 和 B 的时候查询的数据量比较大。这个执行的时候 是先 查出来 A 和 B  然后 full join 匹配的话,按照我的理解不会很慢。
      

  3.   

    LZ指的少量 是多少?  1000?  如果A、B表都算1000的数据  full join连接 堆起来就是1000*1000的数据  还会怎么快呢?
      

  4.   

    full join 是满连接 速度肯定要慢很多,数据越多越慢。
    两个表都是10000条数据 那么就是10000*10000
      

  5.   

    单独查 AB 只有10条左右的数据了。对这个语法不是很了解,A 和 B 也不是我写的,只是为了方便想综合一下,不知道是不是嵌套太多,有歧义什么的,如果仅仅是10*10,应该没什么问题,而full join 换成left join,可以正确执行。我想达到的效果是是A表中对应地区的num加上B表中对应地区的num,不知道有什么好的办法。总共的地区一共有11个,只是A B 表的地区都是11的子集,不一定刚好有11地区都有。
    select A.地区,A.num1,B.num2,(A.num1+B.num2)  from (select 地区,count(*) as num1 from (select case when IP地址 between  184025089 and 184549375 then
    省略。。
        else
          '其他'
          end 地区 from
     
    (select d.serialnumber as 序列号,
     
         省略。'yyyy-mm-dd hh24:mi:ss') as 最后激活时间
     
      from device d
     
      left join devicepreconfig dp on d.serialnumber = dp.serial_number
     
    where (dp.rgtype = 0 or dp.rgtype = 1) and d.deleted = 0
     
    ) tb  ) group by 地区) A
     
     
    left join
     
    (select 地区,count(*) as num1 from (select case when IP地址 between  184025123 and 1845493455 then
    省略。。
        else
          '其他'
          end 地区 from
     
    (select d.serialnumber as 序列号,
     
         省略。'yyyy-mm-dd hh24:mi:ss') as 最后激活时间
     
      from device d
     
      left join devicepreconfig dp on d.serialnumber = dp.serial_number
     
    where (dp.rgtype = 0 or dp.rgtype = 1) and d.deleted = 0
     
    ) tb  ) group by 地区) B
     
     
    on A.地区=B.地区
      

  6.   


    ()A  full join ()B on ...因为A表单独查只有10条数据,B表也只有10条,然后 full  join 就一直执行。。因为对这个不熟,就觉得这个不合逻辑,也没有其他的什么思路。就理解不了了。但是(~~~~~~~) A    ~~~~~~~执行可能要检索几十万数据吧。就是不知道可能的错误点会在哪里。
      

  7.   

    只是A B 表的地区都是11的子集,不一定刚好有11地区都有。
    可以以构造的所有地区为左表  来关联数据  不一定非要用full join 关联出来的大半数据都多余的 没必要了..