这个日常工作总结,分享给大家~~
性能优化
- 避免频繁commit,尤其是把commit写在循环体中每次循环都进行
- 使用绑定变量,避免常量的直接引用
- 避免不必要的排序
- 对于数字型唯一键值,用序列sequence产生
- 两表或者多表作连接时,要明确指定其连接条件,以避免产生迪卡尔积
- 不要用 not in,使用exists来使用索引
设计规范
- 临时表(temporary table)使用
A. 如果数据仅在同一个会话中使用,建议尽量使用Oracle定义的全局临时表(Global temporary table),而不是创建的普通表。
B. 对于跨会话使用的临时表,只能使用普通表,但必须建立适合的清理策略,不然临时表会越来越大。
C. 清理策略:使用 job 或手工执行,可根据实际分直接清理和先备份后清理两种,策略上 常用的有四种:
truncate 推荐
delete 不能解决高水位
drop 只能手工清理
rename 只能手工清理 - 数据类型设计必须充分考虑Oracle提供的基础数据类型。
A. 基础数据类型有数值(NUMBER)、日期(DATE)和字符(V ARCHAR2),设计时需充分考虑,使用不同的数据类型来存储相应的数据。
B. 建议不使用VARCHAR2或其他字符类型来存储日期值,如果使用,则不能在此字段上 做运算,需要在数据规范中严格定义。
C. 表字段不允许使用TYPE定义 - 数据量超过10000的表应该考虑设计索引
- 经常与其他表进行连接的表,在连接字段上应该建立索引
- 经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引;
- 频繁DML(写次数明显超过读次数)的表,不要建立太多的索引
- 无用的索引以及重复索引应删除,避免对执行计划及数据库性能造成负面影响。
- OLTP 系统,禁止使用位图索引
- 所有数据库代码使用统一的大小写规则书写,如数据库关键字用大写,其他小写
- 模块代码使用注释区分
- 语句中空白使用空格键,不用TAB建
- 关键字对齐方式要一致
- 不要把多个语句写在一行中
- 避免将 SQL 语句写到同一行
- 相对独立的程序块之间必须加空行
- 最外层的 begin、end 独立成行,且不缩进
- 避免使用 select * 语句
- Insert 语句必须给出字段列表
- 尽量少使用甚至不使用 DBLINK
- 频繁调用的 SQL 语句编写一定要使用绑定变量