呵呵.第二个快!
第二个是直接用常量查.
而第一条却要进行一个全表扫描.第一条你可以改成
select * from a where exists (select b.cola from b where b.cola=a.cola);

解决方案 »

  1.   

    select * from a where exists(select 1 from b where a.cola=b.cola)
      

  2.   

    因为这种关键字in的sql语句其本身的执行速度就慢,再加上in 里边有是一个SQL语句,其速度是可想而知了,你可以用exists
      

  3.   

    我是想知道为什么这样,oracle的机制是什么?
      

  4.   

    是啊,前辈门说说exists和in的区别在哪里?
      

  5.   

    学习。
    exists是说在 Dictionary 对象中是否存在
    in是指在这里面。如:select * from students where ID in(1,2,4);查询ID号在in里面的记录。
      

  6.   

    liuyi8903(甜脆夹心) 
       呵呵.第二个快!
    第二个是直接用常量查.
    而第一条却要进行一个全表扫描.第一条你可以改成
    select * from a where exists (select b.cola from b where b.cola=a.cola);
    第一条为什么不写成
    select a.* from a,b where b.cola=a.cola; 
     
      

  7.   

    我并不是想要改正,我是想知道in后使用固定值和子查询的所带来不同的原理啊试想一下,假设in后的内容是由一张百万记录中查询出来的3个值'a','b','c'
    这和常量的集合('a','b','c')相比,速度谁快,不用讲了吧。
      

  8.   

    select * from a where a.cola in (select b.cola from b);
    需要先从b表获得结果集,再处理,select * from a where a.cola in (value1,value2,...);
    结果集已经给定了,不需要准备数据过程。