author:skate
time:2010-10-22
数据库的开发经验总结
一般数据库性能问题都是低效sql的原因,所以在数据库设计开发阶段就要开始考虑,加强数据操作的优化(sql和pl/sql优化),下面是我简单的总结了从建表到代码的一些常用优化经验,以后有时间会逐个部分细化
一.表/索引的创建
在我们的数据库结构中主要用了两种存储结构,普通堆表和B*索引;为了充分考虑数据存储优化,我们还要引入IOT和聚簇表;针对表使用频繁度、并发度,数据增长量等因素为表和索引设计pctfree、inittrans等存储参数;还有如何创建合适索引,这些都是我们在数据库设计阶段要考虑的。
二.Sql部分
Sql优化非常重要,需要考虑表的连接方式、表访问路径等,应该用索引的地方一定要用索引;在书写sql的时候,像distinct,order by,group by,*号 尽量避免使用,如果无法避免那就尽可能的优化;还有像用union all 替代union,使用decode,使用表别名等,这些都是我们在写sql时要注意的
三.Pl/sql部分
优化的核心思想:
1. 避免过多复杂的sql脚本,避免过多的无用计算,如:嵌套循环,死循环等
2. 避免过多、过大的磁盘排序,尽量在内存中操作数据
3. 尽量减少单io磁盘访问数量和磁盘访问次数
在写pl/sql代码的时候,合理设计逻辑,避免大事务操作,下面几点也是需要特别注意的
1. 避免使用游标,如果一定要用,要尽可能的优化,避免在游标里有查询,尽量在循环外部操作
2. 使用本地动态sql, 批量处理,returning等优化pl/sql代码
3. 高效的使用流程控制语句,pl/sql内存表等,避免使用变量约束,隐式数据类型转换等
四.实际优化经验技巧
1. 批处理dml,合理利用forall,buck
2. web分页优化
3. 临时表/中间过程表的应用,可以汇总一些需要经常计算的数据
4. 循环逻辑的设计,减少数据访问,避免死循环
5. 游标的使用
6. pl/sql内存表的使用
7. inlist增强变量绑定的使用
-------end------