wuqingyong 2011-08-02
oracle的sql也是遵循几点原则
1.能用oracle自带函数,或者用他的函数可以实现的效果,尽量用oracle的函数,因为他的函数的算法和实现函数的语言都是效率非常高的,一般情况下比我们写的要高效。
2.sql的关键字都大写,因为oracle再执行sql时,会把所有的sql转换为大写来执行
3.select句子中最好不要出现*,要写具体的列名,不然oracle会一次解析每个字段,费时。
4.from的表,如果是一张或者两张表,把条数最少的放在后面,如果是三张以上,把和其他有交叉的表的放在后面,所谓交叉,就是和其他表有关联的的意思,因为oracle的扫描是从下网上从右往左,这样的结果是可以尽量的少扫描表,
5.where把可以过滤掉多条数据的条件往后放,一次类推
6.删除重复记录的最好办法是用rowid
7.使用decode函数减少处理时间
8.用truncatetable表明代替deletefrom表名,因为第一个会删除表所对应的表空间
9.用where过滤,少用having过滤
10.使用表的别名也可以提高效率
11.用EXISTS替代IN、用NOTEXISTS替代NOTIN:
12.使用索引来提高查询效率,但是索引建立的时候很有将就,并不是每个字段都建立,那样反而会降低效率
13.用EXISTS替换DISTINCT
14.避免在索引上使用计算那些函数
15.用>=来代替>,因为有个确切的边线,可以让oracle跟好的确定边线
16.避免在索引列上用not,因为这回让索引失效,也要避免使用isnull,isnotnull操作
17.用union来代替or操作,如果可以的话
18.用in代替or,如果可以的话
19.用unionall代替union,如果可以的话,因为union要去除重复的列,还要排序,费时
20.where句子中把过滤掉数据最的条件放在最后,一次往前罗列,因为oracle的检索顺序是从下网上,从右往左,
21.对于以上的操作都没什么疑问的话,那就要借助plsql这样的开发工具,去查看我们写的sql的解释执行计划,这个才是最后敲定你的sql效率的依据,
22.在oracle上尽量不要使用hints提示,因为我们的表始终在变,可能目前你的效果很有效,但是随着每个表的数据的变化,并不保证你的sql始终都是高效的