首页 > 数据库 > Oracle > sql语句的一些规则
1。在条件语句中使用exists而不是in
SQL> select a.deptno,a.ename from emp a 2 where a.deptno in (select deptno from dept);
改为:
SQL> select a.deptno,a.ename from emp a 2 where exists (select b.deptno from dept b where a.deptno = b.deptno);
原因:使用'exists'的执行计划要比'in'的要好。
2。在where子句中最好不要在索引列上使用函数和使用运算
SQL> select deptno,ename from emp where deptno=20;
最好不要使用:
SQL> select deptno,ename from emp where deptno+10=20;
原因:在where子句中,如果对索引列不使用函数或者运算,则会使用索引检索数据,否则不使用索引,而是全表扫描。
3。有些情况下,Oracle会使用隐式的数据转换如果在where子句比较表达式中左右两边的数据类型不一致时会发生隐式的数据类型转换,这种情况应该尽量避免。
但是,由number类型转换未varchar2类型时,仍然使用索引;
而由varchar2类型转换为number类型时,则不会使用索引。(这种情况是尤其要避免的)
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/74296/viewspace-1015703/ ,如需转载,请注明出处,否则将追究法律责任。