Oracle SQL的规范化,也是优化,解析SQL很重要的一环;团队或个人有良好的SQL规范.也是减轻服务器解析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 (子查询)
这个不说,来报名吧 http://www.7daysgps.com/
9. 分页不能有 distinct, group by ,union /union all,order by 只能一个表
来报名吧, http://www.7daysgps.com/
10. 关联更新,改写为merge 或者改写为利用 rowid更新
11. 禁止对join列用函数 比如 where trunc(时间)=b.时间
12. 注意数据类型之间的隐式转化




