最近在参加培训,正好上到了一堂关于“开发DBA”的课,课上讲了很多以前不太了解的东西,比如“开发DBA”和“传统DBA”的区别之类的东西,不过对我而言,最有价值的貌似还是一些小的SQL优化技巧,在这里做个笔记。
在Oracle中SQL语句的处理过程分为三步:parse=>execute=>fetch,其中fetch这个阶段只有select有,语法分析和执行阶段所有语句都有。用trace工具可以看到整个语句的执行过程,我从没做个DBA,开发时也没有用过类似工具,顶多也就用PL/SQL跑跑语句(其实自打用了Hibernate后我都很少写SQL了,惭愧啊)。
- select语句中少用*,因为这会带来额外的开销(IO、网络方面等等)
- 避免索引列的隐式类型转换,因为类型转换后使用该列的查询是全表扫描 ,这个在大数据量时可是致命的
- 避免在字段上使用函数,这样无法使用该字段上的索引
- count()不会返回null,但sum()会,用nvl(sum(XXX), 0)来避免这个情况
- 少用lob这样的大字段
站在前人的经验上,希望自己以后多长点记性,虽然我只是个开发人员,不是DBA,不过多学点总没坏处,呵呵~