SQL 编码规范

Posted robinson1988

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.注意隐式转化


13. 省略....报名可得

以上是关于SQL 编码规范的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入绕过速查表

SQL代码编码原则和规范

sql查询里面xtype='u'是啥意思?

PHP编码规范建议学习

公司数据库编码规范

购物车程序的面向对象设计