sql語句的一些規則

lihui29發表於2009-01-05

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部落格 ” ,連結:http://blog.itpub.net/74296/viewspace-1015703/,如需轉載,請註明出處,否則將追究法律責任。

相關文章