SQL 编码规范

时间:2023-11-17 17:19:44

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.注意隐式转化