oracle exists和in的区别:
通常都知道exists的效率比in要高一些,但不知道为什么,今天特地看了一下:
exists是先进行主表查询,然后再进行子表查询如果查到符合条件的返回;
in是先进行子表查询,把子表查询的结果存入一张中间表后,再进行主表查询,所以一般exists的效率要高些。
一般主表的数据较大,子表数据较小,可以用in。
sql优化手段:
(1)用exists代替in;
(2)用truncate代替delete;
(3)用union代替or(适用于索引列);
(4)对经常要查询的字段建索引;
(5)在子查询中尽量少用“*”;
(6)from语句选择最好记录的表做为基础表(最后的表);
(7)where语句过滤条件的排序,那些可以过滤大量数据的条件应放在最后面;