对象创建/修改规范
1)新增实体表的命名应该符合数据库对象命名规范,包括索引、约束等;
2)开发商必须提供脚本正确性测试报告,而且要在测试环境中用SYS账号,保障测试与上线环境操作一致性。
3)生产库表、索引、sequence等对象必须加属主。
4)生产库表及索引不能创建在PERSON或系统的表空间下,并且必须显式指定表空间。表创建在数据表空间上,索引创建在索引表空间上。
5)修改表结构或新增索引,在工单评审结果中,提醒开发商要和上线人员沟通是否停止应用。
6)每张表必须说明用途以及对应生命周期。超过2G或者数据量在两千万以上表必须按照月份进行分区,以进行清理,必须说明是否有对应历史表。每日数据量在一千万以上的必须进行日分区并由应用进行按日清理。
7)生产库不允许创建nologging的表。
8)大表中char类型字段不允许扩展长度。
9)大表中新增字段不允许指定默认值。
10)接口表必须注意碎片问题,可通过合理的分区,在不影响业务数据的情况下,定期truncate历史分区避免高水位问题。
11)新上线的表,必须在上线时对表进行统计信息采集。(非空表才要收集统计信息,空表收集也没有意义)
12)建议在选择性高、空值少、数据分布均匀、SQL使用频次高的字段上创建索引。(增加索引必须对提高效率有用)
13)创建复合索引时,将选择性高、使用频次高的字段放在前面。(增加优先考虑等值条件列为前导列)
14)如果存储日期,尽量使用DATE类型,不要用字符串类型。
15)字符类型避免使用CHAR,VARCHAR2类型严格定义长度。
16)数据库实体建议有主键,并且建议主键字段个数不超过4个
17)数据库实体中索引个数建议不超过5个,索引字段数量不超过4个。
18)建立主键、唯一约束必须先建立索引,之后建立约束。不要用默认创建方法。
19)新增库表根据主键和索引查找与旧表的关联关系,是否有类型和长度不一致情况。
20)检查新增表所在表空间是否足够,如果创建表含有LOB段需要评估大小。
21)检查索引字段是否有NOT NULL约束,任何列不存储NULL值,必须加NOT NULL约束,特别索引列,要看看是否有NOT NULL约束。
22)建立索引,原则上不允许与原有索引产生冗余。并充分考虑索引选择性与执行SQL关系。OLTP原则上不可建立BITMAP索引。
23)若有表使用外键关联到其他主表,需要在建外键的表相应字段上建立索引。
SQL评审规范
SQL评审目的主要是是确保业务正确性、及早发现性能问题:
1)OLTP SQL要有绑定变量
2)有索引的谓词,是否函数、数学运算、like前通配,<>等导致索引失效,如date类型,使用to_char导致索引失效。
3)没有必要的外连接,使用了外连接,严格审核外连接操作。
4)尽量不要使用标量子查询,有标量子查询的,要特别注意性能问题。
5)对查询中使用*号的,如SELECT *,SELECT COUNT(*)。。。等,要严格审核,比如COUNT(*)可能会导致未使用索引(如列无NOT NULL约束),只列出需要访问的列。
6)视图中的SQL过于复杂,要严格限制使用,可能会导致无法merge等,特别带rownum
7)使用UNION,DISTINCT,ORDER BY等语法造成排序的,严格检查是否有必要
8)UPDATE更新数据量大的,检查是否有必要改为MERGE,UPDATE INLINE操作
9)严格限制自定义函数使用,尽量使用ORACLE内部函数
10)复杂SQL必须带别名,而且所有列的访问,都要通过别名。
11)能够避免重复表访问的,必须避免,通过改写SQL提出建议。
12)SQL数据过滤条件应该写在最底层,达到及早过滤的效果。
13)发现执行计划低效的,提出整改建议。




