1.
select count(t1.id)
from table1 t1
where t1.id = (select t2.id from table2 t2 where t2......);2.
select count(t1.id)
from table1 t1,table2 t2
where t1.id = t2.id
and t2......;问下,这2中写法都可以达到汇总表1的目的吧?
那有性能上的区别吗?
如果不是count(),而是t1.其他字段呢?还有区别吗

解决方案 »

  1.   

    谁快谁慢看执行计划
    第一种写法有错吧
    =要改为in
    我认为第二种好点
    还要看id在t2表中的唯一性
    如果有重复值的话,第二种不准确
    不重复的话是一样的
    可以将第一种写法改为
    select count(t1.id) 
    from table1 t1 
    where exists(select 1 from table2 t2 where t2......
      and t2.id=t1.id); 
      

  2.   

    可能例子举的有点问题,id不是主键,
    如果id是主键count()结果就是0或1了
    大家应该明白我的意识吧
      

  3.   


    1,第一种写法语法有误,应该把=改成in
    select count(t1.id) 
    from table1 t1 
    where t1.id in (select t2.id from table2 t2 where t2......); 2,在理论上是第二种效率要高,因为关联查询比关联子查询效率要高。3,最好先看执行计划然后结合该表涉及的业务流程,确定该采用哪种sql比较好。
      

  4.   

    你的意思是说t2...是制定一个t2 id的值?
    如果是这样的话,两个差不多吧
    看执行计划
      

  5.   

    Explain Plan 可用来 判断 SQL语句的效率1. 如Toad 工具,直接在界面上点下就可以了,2. SQLPLUS 里执行 EXPLAIN PLAN
     
    SQL>EXPLAIN PLAN FOR 你的sql语句; eg:SQL>EXPLAIN PLAN FOR SELECT * FROM EMP WHERE EMPNO=7369; 
    然后 
    SELECT plan_table_output 
      FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); 查看结果就是前面SQL语句的执行计划。 ­
      

  6.   


    Explain Plan 就是最常用的,也很方便..