Insert

直接路径法

这种方法不去查找已有块中的空间, 它直接从高水位之上开始插入数据. 直接使用的是 nologging模式, 记住默认情况下通过直接路径插入进行加载的表上的索引仍然是会产生undo 和 redo. 而表的数据因为 nologging 不会产生redo 和 undo , 仅仅是对数据字典来进行修改.

insert /*+ append */ into table select * from hr.employees nologging;

insert /*+ append_values */ into dual(dumy) values(‘Y’);

然而, 快速方法有下面几个问题.

  • 在任何给定的时点一张表上只能有一个直接路径写入
  • 数据将被插入到高水位之上, 因此任何高水位之下的可用空间都不能在直接路径插入中使用
  • 在开始之后进行插入的会话不能对表做任何事情(甚至是对表进行select), 指导进行提交或回滚.
  • 不支持一些不太常用的数据结构(对象类型, 索引组织表等)
  • 不支持引用约束(也就是说它们将导致通过传统方法进行插入)
多表插入
条件插入

以上两个, 在别的 blog 中都有介绍过

DML 错误日志

这个功能提供了一种机制来使得你的一百万行的数据插入不会仅仅由于几行有问题而失败, 10g以后引入, 类似于 SQL*Loader的错误日志功能, 它的基本原理是将任何可能导致语句失败的记录转移, 放入到一张错误记录表中.  另外, LOG ERRORS 子句在其他 DML 语句中同样适用(update, delete, merge)

1) 适用 DBMS_ERRLOG.CREATE_ERROR_LOG 来创建爱你错误日志表

2) 在 INSERT 语句中声明 LOG ERRORS 子句

execute DBMS_ERRLOG.CREATE_ERROR_LOG(‘big_emp’, ‘big_emp_bad’);

例如:

insert into big_emp (employee_id, first_name, last_name, hire_date, email, department_id, job_id)

values (303, ‘bob’, ‘loblaw’, ‘01-jan-10’, ‘bob@yflawyer.com’, ‘2a45’, 1)

log errors into big_emp_bad;

这样, 如果出现插入错误, 那么数据就会插入到 big_emp_bad 表中, 然后, 我们可以修改插入数据的脚本, 根据 big_emp_bad 表中不能插入的内容, 再重新插入, 因为刚刚插入时, 如果遇到错误, 那么就会回滚, 所以, 很有可能1条数据都没有插入.

尽管 DML 的错误记录非常强大, 你需要注意下面这些警告

  • LOG ERRORS 子句不引起隐式提交, 错误记录的插入是由一个自治事务来处理的, 也就是说, 即使返回了错误并将坏记录插入到了ERRORS表中, 你也可以提交或回滚插入到基表中的记录, 即使事务进行了回滚, 载入到 ERRORS 表中的记录也将会保留.
  • LOG ERRORS 子句不会禁用 APPEND 提示. 如果使用了 APPEND提示, 对于基表的插入将会使用直接路径写入机制来完成. 但是, 任何到ERRORS表的写入都不会使用直接路径写入. 这通常并不是问题, 因为你很少会将大量数据载入到 ERRORS表中.
  • 违反唯一键或索引约束的直接路径插入运算将会引起语句失败并进行回滚.
  • LOG ERRORS 子句不会追踪 LOG, LONG 或对象类型列的值, 它可以与包含这些不支持的数据类型列的表一起使用但是这些不支持的数据类型的列将不会插入到ERRORS表中. 所以, 这一项还是要注意, 看是否还继续使用 ERRORS, 如果还是需要使用, 必须使用 CREATE_ERROR_LOG 存储过程的 SKIP_UNSUPPORTED参数.

update

如果需要更新很多内容, 比如 某个应用需要每晚更新10亿数据, 最好的办法是 首先截断然后重新加载. 如果不行, 可以使用 create table as select 来创建一张新表.

大量更新不是一个好主意.

DELETE

与大量更新类似, 大量删除通常也不是好主意. 通常重建一张表或一个分区比删除表中很大百分比的数据行要更快. 重建的方法最大的弊端就是在重建期间必须对对象进行保护以阻止其他修改. 基本思想

1) 创建一张临时表

2) 将不需要删除的记录放到临时表中 (可以使用 append 方法)

3) 重建相关对象(索引, 约束, 授权以及触发器)

4) 重命名表

另外, 如果Bussiness 逻辑准许我们 truncate , 那么这也是一个很好的解决方案

MERGE

语法这里就不介绍了, MERGE 提供了最大的灵活性, 因此不要忽略这个单独的 SQL 语句在一次执行过程中可以进行多种DML运算来运算这样一个事实.

13 SELECT 以外的内容的更多相关文章

  1. js获取select选中的内容

    ### 获取select选中的内容 js获取select标签选中的值 var obj = document.getElementById("selectId");//获取selec ...

  2. php面试专题---13、AJAX基础内容考点

    php面试专题---13.AJAX基础内容考点 一.总结 一句话总结: ajax对提升用户速度,缓解服务器压力方面也是很有可取之处的,毕竟传递的数据少了 1.AJAX基础概念? Asynchronou ...

  3. laravel 中将DB::select 得到的内容转为数组

    $sql = "select count(*) as num from api_log where uid='{$this->uid}'";                $ ...

  4. select选择框内容左右移动添加删除栏(升级)

    先看一下之前的版本(10年前的作品了) 新版增加了拖动事件(双向及本列),双击左右自动移动,修正了算法性能更好: 也更新了如果姓名长度太长显示变形问题

  5. 工作总结 2018 - 4 - 13 select标签 multiple 属性 同时选择多个选项

    <div class="col-xs-4"> @Html.DropDownList("CustomerType", (MultiSelectList ...

  6. iview框架下,modal内容过长,select选项位置不对

    问题 modal组件中内容过长,超过一屏,有滚动条后,里面包含的select组件选项内容,位置会不对 解决 在使用select的时候添加transfer属性

  7. Selenium: 利用select模块操作下拉框

    在利用selenium进行UI自动化测试过程中,经常会遇到下拉框选项,这篇博客,就介绍下如何利用selenium的Select模块来对标准select下拉框进行操作... 首先导入Select模块: ...

  8. DQL 数据查询语言 select

    1.select 1.select 单独使用 (1) 查询数据库的参数 查看端口: select @@port; 查看数据路径 select @@datadir; (2)调用内置函数 查看当前库 se ...

  9. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

随机推荐

  1. 十步完全理解 SQL(转载)

    英文出处:Lukas Eder. 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 ...

  2. mongodb 2.6 window 安装启动服务

    安装目录:C:\Program Files\MongoDB 2.6 Standard\ 创建目录:D:\mongodb\data   通过cmd,执行如下命令: cd C:\Program Files ...

  3. 如何在ecshop订单中显示客户给商家的留言

    ecshop后台->订单管理->订单打印 在你想要加入的位置加入 客户给商家的留言:{$order.postscript} ok啦,很简单咯

  4. 完整学习git一git设置

    1查看git版本 git --version ➜ php- git:(master) git --version git version 1.8.3.1 2告诉git当前用户的姓名和邮件地址 git ...

  5. Linux编译安装Mysql步骤

    一. Centos 用 wget 下载需要的软件,保存到目录/home/zwl/MySql/下 wget http://dev.mysql.com/get/Downloads/MySQL-5.5/my ...

  6. YTU 2344: 先序遍历二叉树

    原文链接:https://www.dreamwings.cn/ytu2344/2603.html 2344: 先序遍历二叉树 时间限制: 1 Sec  内存限制: 128 MB 提交: 4  解决:  ...

  7. Java学习之路(五)

    1:补充: 使用super也可以调用父类的成员函数  格式 :  super.函数名(); 2:抽象类与抽象函数 抽象函数的定义: 只有函数的定义,没有函数体的函数被称为抽象函数 抽象类的定义: 使用 ...

  8. POJ Sky Code 莫比乌斯反演

    N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB   64-bit integer IO for ...

  9. js遍历

    最近看了一些不错的文章关于js遍历+js数组去重+文件上传的,今天也自己动手试了试.有好多之前不是细节不是很了解.正好学习了. map函数也是 类似这样的对象还有函数的属性arguments对象,当然 ...

  10. Android WebView使用基础

    WebView基本使用 WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?x ...