exists需要连接条件,你这个是具体值,故无法改为exists 贴出执行计划,ybh是主键,应该是index range scan。另外,把*替换为具体列名,*不应该出现在生产环境代码里。
*,在编译时还要转换为具体的列名称。无法用EXISTS !!建立索引试试
如果能把这些值放入一个临时表中,还是可以改成exists的
不可以,因为exists需要连接条件
100个值,exists的效率应该不会更高,就用in好了
其实把那100个值放在一个文件里面,或者放在一个表里面,然后关联查询这样效率比较高...如果放在一个文件里面的话,例如TXT文件,可以通过ORACLE建立外部表...然后与主表关联就可以了.之所以放在一个文件里面,这样是为了程序操作方便,我想你括号里面的数据可能会变换的...,如果不懂得建立外部表的话,就建立一个基本表好了,,,记得关联的时候用左外连接,这样效率也会提高...例如新表为 create table test ( id varchar2(7) )INSERT INTO TEST VALUES('.......'); INSERT INTO TEST VALUES('.......'); INSERT INTO TEST VALUES('.......'); INSERT INTO TEST VALUES('.......'); ..... select * from t1 left outer join test on t1.ybh=test.id where test.id is not null; 因为是唯一的值的,所以这里也可以不用外连接 直接: select * from t1 , test where t1.ybh=test.id
贴出执行计划,ybh是主键,应该是index range scan。另外,把*替换为具体列名,*不应该出现在生产环境代码里。
(
id varchar2(7)
)INSERT INTO TEST VALUES('.......');
INSERT INTO TEST VALUES('.......');
INSERT INTO TEST VALUES('.......');
INSERT INTO TEST VALUES('.......');
.....
select * from t1 left outer join test on t1.ybh=test.id where test.id is not null; 因为是唯一的值的,所以这里也可以不用外连接 直接:
select * from t1 , test where t1.ybh=test.id
而用in的话 yhb是主键,会使用 索引