[20150803]触发器对dml的影响.txt

--最近做一个优化项目,这个项目实际上ETL项目,里面出现如下语句:
UPDATE patient_medical_cost t
   SET t.total_costs = NVL (total_costs, 0),
       t.drug_west_costs = NVL (drug_west_costs, 0),
       t.drug_middle_costs = NVL (drug_middle_costs, 0),
       t.drug_anti_costs = NVL (drug_anti_costs, 0)
WHERE    total_costs IS NULL
       OR drug_west_costs IS NULL
       OR drug_middle_costs IS NULL
       OR drug_anti_costs IS NULL;

--这个本来应该在整合的抽取时就应该做好设置为0,根本不应该在进入表在做处理,而是通过索引的方式来处理不是很好.
--目前我想测试看看触发器对插入的影响.

1.建立测试环境:
SCOTT@test01p> @ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

create table t (id number ,x1 number ,x2 number ,x3 number ,x4 number);

2.无触发器的情况:

set timing on
insert into t select rownum ,0,0,0,0 from xmltable('1 to 10000000');
truncate table t
commit ;

--3次测试(第1次忽略,实际上也是这个时间):
Elapsed: 00:00:34.28
Elapsed: 00:00:36.28
Elapsed: 00:00:35.68
Elapsed: 00:00:32.21

4.建立触发器:
--从我自己管理数据库的角度,我非常不喜欢触发器.我一直认为这种情况是不得以而为之.

CREATE OR REPLACE TRIGGER tri_t_null_0
BEFORE INSERT
ON T
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
BEGIN
   :NEW.X1 := nvl(:new.x1,0);
   :NEW.X2 := nvl(:new.x2,0);
   :NEW.X3 := nvl(:new.x3,0);
   :NEW.X4 := nvl(:new.x4,0);
   EXCEPTION
     WHEN OTHERS THEN
       RAISE_APPLICATION_ERROR(-20002, 'insert into t error!');
       RAISE ;
END tri_t_null_0;
/

set timing on
insert into t select rownum ,NULL,NULL,NULL,NULL from xmltable('1 to 10000000');
truncate table t
commit ;

Elapsed: 00:01:18.35
Elapsed: 00:01:20.09
Elapsed: 00:01:19.66

5.对比可以发现:

79/34=2.3,使用触发器会慢2.3倍,看来不能考虑触发器的解决方式.

6.12c有1个新特性,可以让缺省值等于特定值.也测试看看:

SCOTT@test01p> drop trigger tri_t_null_0;
Trigger dropped.

alter table t modify(x1  default on null 0);
alter table t modify(x2  default on null 0);
alter table t modify(x3  default on null 0);
alter table t modify(x4  default on null 0);

set timing on
insert into t select rownum ,NULL,NULL,NULL,NULL from xmltable('1 to 10000000');
truncate table t
commit ;

Elapsed: 00:00:32.13
Elapsed: 00:00:28.46
Elapsed: 00:00:33.14

--基本与无触发器一致.

SCOTT@test01p> @ddl scott.t
C100
--------------------------------------------------------
  CREATE TABLE "SCOTT"."T"
   (    "ID" NUMBER,
        "X1" NUMBER DEFAULT 0 NOT NULL ENABLE,
        "X2" NUMBER DEFAULT 0 NOT NULL ENABLE,
        "X3" NUMBER DEFAULT 0 NOT NULL ENABLE,
        "X4" NUMBER DEFAULT 0 NOT NULL ENABLE
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

[20150803]触发器对dml的影响.txt相关推荐

  1. DDL触发器与DML触发器比较

    DML触发器 DML触发器就是普通的  INSERT / UPDATE / DELETE 触发器. DDL触发器就是一些特有的 DDL 语句的触发器. 例如:登陆到服务器的触发, 创建数据库的触发.  ...

  2. Oracle一张表写多个触发器,详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数 需求产生: 业务系统中,有一步"抽数"流程,就是把一些数据从其它服务器同步到本库的目标表.这个过程有可能 多人同时抽数,互相影响 ...

  3. 关于MySQL建表对DML的影响

    今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert.update等.不过也没有保留现场.因此有疑问为什么建表会影响DML? 分析          首先这个现象不是在所有场景都会碰到( ...

  4. mysql建表影响效率_关于MySQL建表对DML的影响【转】

    本文来自这里 今天一位同学问到线上曾经碰到过连续建表,导致阻塞普通的insert.update等.不过也没有保留现场.因此有疑问为什么建表会影响DML? 分析 首先这个现象不是在所有场景都会碰到(否则 ...

  5. Oracle数据库中dml提交,奇怪,ORACLE的触发器的DML操作,没有COMMIT,居然也能真正的提交掉???...

    SQL> select * from dept; DEPTNO DNAME          LOC ---------- -------------- ------------- 10 ACC ...

  6. 杂谈--DML触发器学习

    触发器按类型分为三类: 1. DML 触发器,在数据变更时触发: 2. DDL 触发器,在修改数据库级别或实例级别对象时触发: 3. Login 触发器,在用户登录时触发: 最常见的是DML触发器,D ...

  7. Oracle入门(十四.20)之创建DML触发器:第一部分

    一.什么是DML触发器? DML触发器是执行SQL DML语句(INSERT,UPDATE或DELETE)时自动触发(执行)的触发器. 您可以通过两种方法对DML触发器进行分类: •执行时间:BEFO ...

  8. Oracle入门(十四.21)之创建DML触发器:第二部分

    一.使用条件谓词 在上文中,看到了一个触发器,可以防止在周末插入EMPLOYEES: CREATE OR REPLACE TRIGGER secure_emp BEFORE INSERT ON emp ...

  9. PL/SQL -- DML 触发器

    --======================= -- PL/SQL --> DML 触发器 --======================= 何谓触发器?简言之,是一段命名的PL/SQL代 ...

  10. oracle dml触发器 获取当前执行sql语句,Oracle DML触发器

    DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: * 确定触发的表,即在其上定义触发器的表. * 确定触发的事件,DML触发器的触发事件有INSERT ...

最新文章

  1. IEEE signal processing letters 投稿经验
  2. 量子科技概念大火,国内现状如何?
  3. Synchronization (computer science)
  4. flink批处理访问mysql_Flink 异步IO访问外部数据(mysql篇)
  5. 转载 SharedPreference.Editor的apply和commit方法异同
  6. 贝壳app Authorization参数分析
  7. b500k带开关电位器内部构造_R138带开关大功率大电流电位器 B10K B500K
  8. 【电设控制与图像训练题】【激光打靶】【opencv测试代码以及效果】
  9. 流程 - 发布【敏捷方法之Scrum v0.2.pdf】
  10. java 匿名接口实现_Java通过接口实现匿名类的实例代码
  11. 关于Cococs中的CCActionEase(下)
  12. Java后端学习路线(校招前准备)
  13. nginx配置ssl证书的方法
  14. Navicat Preminm注册机 和源文件
  15. 在四位共阴极数码上显示“2 3 5 8”四个数字
  16. 航模舵机控制原理详解
  17. SSM框架整合详细教程
  18. SPSS实现距离分析
  19. 解决edge浏览器无法打开pdf文件问题
  20. 使用Windows10搭建服务器 ——一次虚拟机实验记录

热门文章

  1. paip.找回密码功能流程设计(通过email)
  2. paip.PHP实现跨平台跨语言加解密方法
  3. 信息安全等级保护建设(二,三级)需上的设备
  4. 中移苏研大规模资源高可用研究及实践
  5. 【三维路径规划】基于matlab Nsga-2算法求解无人机三维路径规划【含Matlab源码 1455期】
  6. 【水果识别】基于matlab GUI苹果质量检测及分级系统【含Matlab源码 519期】
  7. 【优化求解】基于matalb改进的遗传算法求解IGA城市交通信号优化问题【含Matlab源码 215期】
  8. gpt2 代码自动补全_如果您认为GPT-3使编码器过时,则您可能不编写代码
  9. 新时达as380服务器显示75,成为电梯高手之新时达AS380控制系统故障代码
  10. python:批量修改文件夹下所有图片名字,改为文件夹名字的一部分+.jpg