- 创建表的时候。应尽量建立主键,尽量根据实际需要调整数据表的PCTFREE和PCTUSED参数;大数据表删除,用truncate table代替delete。
- 合理使用索引,在OLTP应用中一张表的索引不要太多。数据重复量大的列不要建立二叉树索引,可以采用位图索引;组合索引的列顺序尽量与查询条件列顺序保持一致;对于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。
- 查询语句全部大写。
- 使用表的别名,如此能够减少表字段的输入错误,而且多表联查时避免相同字段的歧义。 如select * from vehicle t where t.hpzl='02'
- where 后的条件执行时是从后往前,因此能够筛选更多数据的条件排在后面。
- 查询尽量用确定的列名,少用*号。比如:select count(key)from tab where key> 0性能优于select count(*)from tab;
- 将or换为in。 比如 select * from vehicle where syxz in ('R','O')性能优于select * from vehicle where syxz='R' or syxz='O'
- 将>,<替换为>=,<=;
- 避免对字段使用函数等操作。比如:使用select * from vehicle where ccdjrq=to_date('2019-1-1','yyyy-mm-dd')而不是 select * from vehicle where to_char(ccdjrq,'yyyy-mm-dd')='2019-1-1'
- 尽量少嵌套子查询,这种查询会消耗大量的CPU资源;对于有比较多or运算的查询,建议分成多个查询,用union all联结起来;多表查询的查询语句中,选择最有效率的表名顺序。Oracle解析器对表解析从右到左,所以记录少的表放在右边。
- 清空表时使用truncate table xxxx; 而不是delete。(注意:truncate操作不可恢复!)
- 尽量多用commit语句提交事务,可以及时释放资源、解锁、释放日志空间、减少管理花费;在频繁的、性能要求比较高的数据操作中,尽量避免远程访问,如数据库链等,访问频繁的表可以常驻内存:alter table...cache;
- 在Oracle中动态执行SQL,尽量用execute方式,不用dbms_sql包。