sql1:
SELECT LS.LINKSET_NAME,T_LS.UAV,T_LS.UAVT,L.LINK,T_L.SVCT
FROM TSPPI_TRFS_LINKSET_HWNGN T_LS,TSPPI_TRFS_LINK_HWNGN T_L,TSP_CI_LINK L,TSP_CI_LINKSET LS
WHERE T_LS.OFFICE_ID = LS.OFFICE_ID 
AND LS.OFFICE_ID = L.OFFICE_ID 
AND T_L.OFFICE_ID = L.OFFICE_ID 
AND T_LS.LINKSET=LS.LINKSET 
AND LS.LINKSET_ID = L.LINKSET_ID
AND T_L.LINK = L.LINK
sql2:
select * from 
(
select a.office_id,a.uav,a.uavt,b.linkset_id from TSPPI_TRFS_LINKSET_HWNGN a ,TSP_CI_LINKSET b
 where a.office_id=b.office_id and a.LINKSET=b.LINKSET 
) t1,
(
select a.office_id, svct,b.linkset_id from TSPPI_TRFS_LINK_HWNGN a,TSP_CI_LINK b 
where a.office_id=b.office_id and a.link=b.link
) t2 
where t1.office_id=t2.office_id and t1.linkset_id=t2.linkset_id
sql1和slq2结果是否一样

解决方案 »

  1.   

    不一样,第一句的效果好
    因为第二句多做子查询,而且select 出来字段多
      

  2.   

    除了显示的字段不一样,其他应该一样。第一个显示LS.LINKSET_NAME,T_LS.UAV,T_LS.UAVT,L.LINK,T_L.SVCT 五个字段
    第二个显示7个字段
    a.office_id,a.uav,a.uavt,b.linkset_id ,a.office_id, svct,b.linkset_id 
      

  3.   

    在逻辑上分析:
    第一句数据扫描时,直接连接查询,
    第二句先完成子查询(扫描第一次),然后再进行where后面关联查询(扫描第二次)
    之所以我觉得第一句效果会好一些
      

  4.   

    不一样啊,后者七个字段虽有a.office_id, b.linkset_id相同的内容,但一来分两列显示,
    二来a.office_id, a.uav, a.uavt, b.linkset_id,svct和
    LS.LINKSET_NAME, T_LS.UAV, T_LS.UAVT, L.LINK, T_L.SVCT内容也不一样啊。
      

  5.   

    那改一下
    sql1: 
    SELECT LS.LINKSET_NAME,T_LS.UAV,T_LS.UAVT,L.LINK,T_L.SVCT 
    FROM TSPPI_TRFS_LINKSET_HWNGN T_LS,TSPPI_TRFS_LINK_HWNGN T_L,TSP_CI_LINK L,TSP_CI_LINKSET LS 
    WHERE T_LS.OFFICE_ID = LS.OFFICE_ID 
    AND LS.OFFICE_ID = L.OFFICE_ID 
    AND T_L.OFFICE_ID = L.OFFICE_ID 
    AND T_LS.LINKSET=LS.LINKSET 
    AND LS.LINKSET_ID = L.LINKSET_ID 
    AND T_L.LINK = L.LINK 
    sql2: 
    select t1.linkset_name,t1.uav,t1.uavt,t2.link,t2.svct from 

    select a.office_id,a.uav,a.uavt,b.linkset_id,b.linksetname from TSPPI_TRFS_LINKSET_HWNGN a ,TSP_CI_LINKSET b 
    where a.office_id=b.office_id and a.LINKSET=b.LINKSET 
    ) t1, 

    select a.office_id, svct,b.linkset_id,b.link from TSPPI_TRFS_LINK_HWNGN a,TSP_CI_LINK b 
    where a.office_id=b.office_id and a.link=b.link 
    ) t2 
    where t1.office_id=t2.office_id and t1.linkset_id=t2.linkset_id 
    显示结果是否一样,那个效率更高 
      

  6.   


    有道理!
    因为Oracle如果是第一次执行sql语句,它需要编译;第二次和第二次以后执行直接从内存找出相同的sql语句,不需要花时间编译;所以第二次以后执行的时间会短一些;如果两句sql都是第一次执行,我认为第一句的效率会好一些
      

  7.   

    显示结果应该是一样的。
    性能:sql1的新能比sql2的性能搞
    原因:sql1是采用and做为条件查询语句,整个语句只有一条,因此从头到位只执行了一条,有与and连接作为条件,可能比sql2
        在同一时间内要用更多cpu资源,就像异步执行
        :sql2是先执行里面的子查询语句,然后返回结果给父查询语句,作为查询的条件,执行语句有先后,但由于子查询与父查询
         语句很简单,因此在同意时间内要的cpu资源会少一些,但时间会长一些,就像是同步,先子查询,后父查询