insert /*+append*/ into (直接插入)logging失效
来源:互联网 发布:手机超星怎么看网络课 编辑:程序博客网 时间:2024/05/17 08:56
今天要将下列的表的历史数据分到另一个表中,按照时间来分。
create table RUN_REC_DETAIL
(
RUN_DETAIL_ID NUMBER(10) not null,
RUN_ID VARCHAR2(20),
RUN_DATE DATE,
NOTE_NO VARCHAR2(50),
NOTE_EDITION NUMBER(4),
FIELD_NUMBER NUMBER(5),
FIELD_VALUE VARCHAR2(4000),
FIELD_VALUE_CLOB CLOB
); 此表有5个索引
1.建立一个历史表RUN_REC_DETAIL_HIS,建表语句与上一样;
2. 把5个索引建上;
3. alter table RUN_REC_DETAIL_HIS nologging;
4.insert /*+append*/ into RUN_REC_DETAIL_HIS select d.* from RUN_REC_DETAIL where to_char(RUN_DATE,'yyyy') <'2012';
5. commit;
6.alter table RUN_REC_DETAIL_HIS logging;
这样做测试250万的数据产生了5G的redo,怀疑nologging失效。
然后把表RUN_REC_DETAIL_HIS设置为logging,用insert into RUN_REC_DETAIL_HIS select d.* from RUN_REC_DETAIL where to_char(RUN_DATE,'yyyy') <'2012'; 也是产生5G的redo,证实logging失效。
最后测试是索引的问题,把以上的步骤2放到步骤5的后面,不敢相信产生了仅产生6.8M的redo,然后再建立5个索引,也只产生316M的redo,大大小于先前。
nologging 降低redo只是在部分场景下有效:
1.创建索引和重建索引
2.通过append,使用直接路径批量insert操作或SQL*load 直接路径加载数据
3.CTAS方式创建数据表
4.大对象(LOB)的操作
5.一些alter table move/split
数据库模式表模式插入模式redo生成 archive logloggingappend有 loggingno append有 nologgingappend无 nologgingno append有 noarchive logloggingappend无 loggingno append有 nologgingappend无 nologgingno append有
- insert /*+append*/ into (直接插入)logging失效
- INSERT INTO语句中直接插入一条SELECT语句
- INSERT INTO语句中直接插入一条SELECT语句
- insert append 直接路径加载
- insert into 插入语句
- insert into插入数据
- insert /*+ append */ into一定会比insert into好吗?
- 插入数据 insert into / select
- insert into 语句 插入 分为
- Oracle 执行Insert into 语句失效解决方法
- 关于insert /*+ append*/ 各种insert插入速度比较
- insert /*+append*/和各种insert插入速度比较
- Oracle——插入效率普通insert和insert /*+append*/
- (直接)插入排序(Insert Sort)
- insert into插入多行数据
- insert into select 批量插入数据
- insert into table 插入多条数据
- insert into....select ....复制方式插入
- 打印前N个素数
- gcc 编译选项
- aba 回文练习 -- 参考罗大神的
- k_over 重叠字符串
- m_sort 归并排序(迭代)
- insert /*+append*/ into (直接插入)logging失效
- Java算法(链表操作实例)
- 设计响应式导航菜单的五大法则
- How to Connect to Oracle via JDBC
- Android ApiDemos示例解析(192):Views->Spinner
- Java Web应用程序开发
- 最近的软考
- 用 C/C++ 写 CGI 程序
- JSP中文乱码问题 页面经过过滤器后得到的是中文,但插入到MYSQL数据库却成了“?”为什么?