JAVA开发ORACLE的规范

祖仙教小凡仙 海鲨数据库架构师

小仙从事多年的DBA,也会数据库PL/SQL开发。遇到很多性能问题,各种隐患和雷坑。

一 禁止使用long字段

 因为该LONG字段类型BUG多,甲骨文对它彻底放弃了。

二 禁止使用varchar2存储时间

  很简单时间是用来加,减,排序,和范围查找。字符不提供这些,或者精度,准确不够。

三 禁止使用varchar2存数字

 数字用数字字段,这里是说需要进行加工的数字,不是手机的号码。 字符字段里存数字,并且取出来加工,涉及类型转换性能损失。可能导致全表扫描。比如  where money=12000  MONEY字段是字符类型,可存的是数字,开发人员一不小心传入纯数字,就触发隐式转化。

四 禁止使用select *

  * 虽然写得方便,可谁知道后续对该表的字段添加,减少带来的坑呢?

如果添加个CLOB字段呢?你的前端页面并没有显示它,它也还是从数据库传到TOMCAT上,然后JAR做筛选,再丢给JSP。
举例说 一个表 有4个字段,分别是 user(id,name,money,time )
页面 就显示了这4个字段。开发人员赶工期 就来个
SELECT * FROM USER WHERE ID=:1;
上线后N个月,业务需要添加人头像, 就要新增个字段IMAGE CLOB类型.
只有点击该行后,弹显出来的页面才显示人头像. 当然后期开发人员就负责该弹出来的页面语句
SELECT name,money,time,IMAGE FROM USER WHERE ID=:1;

五 禁止使用delete

 不管任何数据是不能被删除的, 只能更新下状态来标注可删除.

数据端DBA维护数据就根据时间和标志来迁移走数据.然后回头把迁移的数据给删了.

六 禁止使用外建约束

外键是个麻烦的事情,在JAVA界有8年的历史,把外键约束放到应用层来处理.

七 禁止使用触发器

 触发器虽然方便,按照JAVA思想所有业务放在应用层,触发器原来本身就是带有业务特性.另外它会延伸很多SQL出来.在高并发下造成性能下降

八 禁止使用存储过程

  业务放在JAVA中,存储过程基本不写业务.存储过程交给DBA去维护数据吧!

九 禁止使用同义词

同义词,好像我拥有你的表,使用时不写你的名字.  这点便利没啥好处.反而因为基表不在,同义词失效情况贼多,而且与表名相同造成对象以存在.

同义词本身可以用只读账号外加付权限就行了. 在如今微服时代基本上OK

十 禁止使用dblink

  DBLINK 会导致查询性能飘忽不定.而且造成被DBLINK的SCN号极大消耗.

十一 禁止使用order by 除了分页sql

 ORDER BY 排序是消耗内存和CPU的资源操作,数据量大的话,就要到硬盘上排序. 你说你的数量小可以在数据库内存完成排序,可是你知道系统上线以后,要在数据库端排序的SQL有多少吗? 每秒几千总有吧! 这样极大消耗数据库CPU或者IO资源.以及不断膨胀的TEMP空间.大家想一下 ORDER BY 不就是让人看的舒服点啊! 这操作可以放在前端JSP,用IE去排序,消耗客户的CPU. 也可以放在应用端TOMCAT 内存里排序.

你说 TOMCAT和数据库排序不是一样的吗?
在如今时代,应用端可以集群,可以被NGINX负载均衡,可以堆服务器.而数据库就一台,或者5-6台. 这些服务器只是为了高可用存在的,大部分不是为了性能存在的. 因为应用服务器都是无状态的,被负载均衡后,每个应用服务器负担很轻.而数据库则不能,全部SQL有一个数据库服务来提供排序.当然一些备库也可以承担部分SQL排序,那是对时间实时性要求低的SQL.其实ORDER BY 开发人员玩起来顺手,有利于加速开发速度而已.

十二 禁止在OLTP系统里使用物化视图

物化视图是方便报表系统的,在交易系统OLTP 物化视图日志会积累很多,时间长了查询对比日志,会消耗OLTP系统资源.
建议使用OGG 从日志挖出数据 同步到报表系统的对应表,然后在报表系统上玩物化视图.

©著作权归作者所有:来自51CTO博客作者mb5fd86d05a0afe的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. MySQL字段默认值设置详解
  2. Mysql5.7的varchar类型字段建索引竟然失败
  3. 数据库操作:增删改查-CURD
  4. 讲给对方听的算法--快速排序(快速选择)
  5. 【Nest教程】数据验证class-validator
  6. Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
  7. 六个超简单又实用的特性,值得一试 【上篇】
  8. 数据结构与算法专题——第九题 外排序
  9. 配置文件中的数据库连接串加密了,你以为我就挖不出来吗?

随机推荐

  1. Android Studio 使用NDK编译时常见的问题
  2. android 微信朋友分享,朋友圈分享
  3. Android全局主题样式控制,语言设置、主题
  4. 启动android默认浏览器
  5. android 9.0 设置 应用应用信息 隐藏 app
  6. Android隐式启动Activity可能存在的坑
  7. 设置ListView分割线
  8. Android 7.1 触摸事件代码跟踪
  9. android各版本对应的SDK level(包括androi
  10. [Android 特效] Android 通过流播放声音(