SQL 编码规范

1. 必须对表起别名,方便调查表用了哪些列 

比如 select owner,object_id,name from a,b where a.id=b.id;

如果不对表取别名,我怎么知道你访问的列是哪个表的。如果SQL几百行,如果SQL表关联很多,去死吧。 

2. 数据库对象 命名 

表             前缀/后缀 T_XXX

视图         前缀/后缀  V_XXX

物化视图  前缀/后缀 MV_XXX

索引         IDX_列名 

特殊表

数据仓库 事实表  _FACT

数据仓库 维度表  _DIM

业务中间表  _TMP

日志表      _LOG 

才用这种命名规范,方便不熟悉业务的DBA,开发人员更快的上手 

3. 严禁标量子查询(分页可以写) 

select (select ... from a where a.id=b.id) from b;  ---这种就叫标量子查询 

假如 b 返回100w 那么 a可能被扫描 100w次 然后你懂的 死了 

标量子查询 全部改写为 select ... from a left join b ..... 

4. 严禁sql套自定义函数,包,存储过程 

道理跟 标量子查询一样 

5. 严禁视图中select包含ROWNUM create or replace view ....select rownum 

影响谓词推入+视图合并 

6. 严禁视图 里面有 order by 

干扰执行计划 

7. 严禁视图套用超过2个 ,因为最里面的视图改了可能影响最外面的 高内聚 低耦合 

如果最里面的视图出问题,那么调用这个视图的SQL全出问题,改写代码都改死你 

8. in exists ,not in not exists 改写为 with as (子查询) 

9. 分页不能有 distinct, group by ,union /union all,order by 只能一个表 

10. 关联更新,改写为merge 或者改写为利用 rowid更新 

11. 禁止对join列用函数 比如 where trunc(时间)=b.时间 

12.注意隐式转化 

posted on 2015-10-29 19:27  Roc.Sun  阅读(287)  评论(0编辑  收藏  举报

导航