【再回首:数据库篇】Oracle 开发雷区
前言
讲完了SQL语句的优化,其实还有一个存储过程,也是可以用来提高查询效率的,但是存储过程又有其弊端。今天就从使用存储过程、触发器及函数的使用讲起。
存储过程、函数及触发器的使用
适量但尽量少使用存储过程、函数;触发器应避免使用。使用存储过程、函数、触发器的影响。
(1) 可以减少数据库与客户端的交互,提高性能;
(2) 有的数据库还对他们进行了某种程度的编译,在执行的时候,不用再对其中的SQL等语句进行解析,从而提高速度。
(3) 如果有多个应用,使用了不同的开发语言,当有某些关键的或者复杂逻辑希望共享,则可以考虑使用存储过程或者函数。因为存储过程等在数据库一级是共享的;
(4) 增强了应用对数据库的依赖,如果打算将来移植数据库的话,使用得越多,则移植的困难越大;数据库中的业务逻辑越多(存储过程等),应用以及存储过程等的维护难度也会增大;
(5) 通常存储过程等没有面向对象的特性,不容易设计出易于扩展的结构。当存储过程比较复杂时,或者它们相互间的调用关系比较复杂时,可能难于维护;
综述
在数据库开发过程中,要具体问题具体分析,实事求是,一切从实际出发。根据表的特征选择合适的方法去提高效率,简化过程。不管是索引还是存储过程或者是函数都是需要适当使用的,滥用也会导致严重的问题。且存储过程和函数,在进行数据库更新时,也需要进行更新。
Oracle开发雷区
一、适用范围
适用于统计分析系统,不适用于在线交易系统;
二、版本合规
1、禁止应用的数据库版本不符合公司软件版本要求;
2、禁止数据库的字符集不符合数据库开发设计规范;
三、安全合规
1、禁止应用运行不支持公司数据库权限分离规范;
2、禁止应用连接数据库硬编码在程序代码中;
3、禁止应用将连接到数据库的口令明文写在配置文件中;
四、数据字典合规
1、禁止开发过程中无数据字典的设计;
2、禁止开发过程中数据字典调整不经过开发DBA审核和批准;
五、表设计合规
1、禁止表列数据类型选择低效、过时、不规范的数据类型,如确实需要必须经过开发DBA审核和批准;
2、禁止存放变长字符串值列设计为char类型,char(100)以上使用varchar2代替;
3、禁止参与业务交易的大表无分区设计、无数据归档方案设计;(大表定义:记录数超过2千万或表数据占用空间超过10GB);
4、禁止程序运行过程中创建正式表和删除正式表,如在批处理中需要可以用存储过程来truncate指定的一张表;
六、索引设计合规
1、禁止业务处理表无主键索引;
2、禁止组合索引的列数量超过三个或索引列数量超过三个未经过开发DBA审核;
3、禁止表索引数量超过五个或索引数量超过五个未经过开发DBA审核;
4、禁止索引在交易时间的并行度不为0;
七、SQL语句合规
1、禁止SQL语句不使用绑定变量或不使用绑定变量未经过开发DBA审核;
2、禁止用select * from。select语句中写出必要的要选择的全部列名;
3、禁止使用select * … for update语句;
4、禁止写复杂的SQL语句;(复杂SQL定义标准: SQL语句长度大于等于4000字符或SQL语句中使用到五表及以上的SQL);
5、禁止大表相关的SQL语句未经过开发DBA对执行计划的验证和确认;
6、禁止出现两个以上大表关联的SQL语句,防止索引对象失效或者执行计划改变导致系统的性能直接失控;
八、其他
1、禁止直接修改char类型字段的长度,如确实必须将其改成varchar2类型,避免出现补充空格的情况;
2、禁止无统一出错处理机制;禁止出现程序结束不提交事务;禁止出现程序异常或失败不回滚事务;
3、禁止单条SQL语句一次性实时返回超过20000条以上的数据结果;
4、禁止使用DBLink、触发器、物化视图;
5、禁止使用SQL语句进行复杂计算;
结语
其实你少的不是开发的细心,少的是…