我们有的一个应用系统需要在某些时段向其日志记录表中集中插入数据。
  通过观察发现该表的一些特征;
  1.主键是使用SEQUENCE单调递增生成的。
  2.对日志表的查询不会扫描多条连续记录(主键)
  当然最为直接的办法就是去掉索引、主键。但是该主键不能停止或直接删除。
  在这种情况下,试图将该主键改造成为REVERSE类型的主键,虽然数据库只有一个单实例。
 
  在测试数据库上进行相关实验:
  背景:
  一张表(LARRY_TEST)中含有1100000条数据,另外建立了一张和LARRY_TEST结构完全相同的表(LARRY_TESTINSERT)。然后创建主键:

ALTER TABLE larry_testinsert ADD CONSTRAINT pk_test_insert PRIMARY KEY (terminal_id);

将LARRY_TEST的数据插入到测试表LARRY_TESTINSERT中

SQL> insert /*+append*/ into larry_testinsert select * from larry_test;

1100000 rows created.

Elapsed: 00:01:30.86

Statistics
----------------------------------------------------------
       1908  recursive calls
      61366  db block gets
      11367  consistent gets
       8191  physical reads
   72506424  redo size
        612  bytes sent via SQL*Net to client
        568  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          4  sorts (memory)
          1  sorts (disk)
    1100000  rows processed

SQL> commit;

Commit complete.

Elapsed: 00:00:00.14

然后清除(TRUNCATE TABLE)该表记录,将主键pk_test_insert转换成REVERSE的

SQL> alter index pk_test_insert rebuild reverse;

Index altered

Executed in 0.469 seconds

检查该主键的类型

SQL> select INDEX_NAME,INDEX_TYPE from dba_indexes where index_name ='PK_TEST_INSERT';

INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
PK_TEST_INSERT                 NORMAL/REV

Elapsed: 00:00:00.09

我们发现该主键已经是REVERSE类型的了。开始插入数据:

SQL> insert /*+append*/ into larry_testinsert select * from larry_test;

1100000 rows created.

Elapsed: 00:01:22.90

Statistics
----------------------------------------------------------
       1923  recursive calls
      61328  db block gets
       9872  consistent gets
       8197  physical reads
   72446936  redo size
        614  bytes sent via SQL*Net to client
        568  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          1  sorts (memory)
          1  sorts (disk)
    1100000  rows processed

SQL> commit;

Commit complete.

Elapsed: 00:00:00.01

结论:
    我们不难发现,后者在插入数据时争用有所下降(减少了插入操作的索引热点块),执行的插入效率有所提高(减少了近8秒钟)。
    同时,这种通过序列、时间戳或按某种规则单调生成主键的表,可以因为使用REVERSE(反转)类型索引来有效的降低索引“单向右增长”(right-growing index)的可能性,即会影响到响应时间和吞吐量。如果在基于RAC的环境中,REVERSE类型的索引会更为适用。
     但要注意,使用REVERSE类型的索引在查询操作时会被限制使用基于索引区间的扫描(index range scans).
    
     在数据库的优化中你经常会发现没有绝对的好,也没有绝对的差。
     人生亦如此 -:)

使用REVERSE INDEX改善大规模数据插入【IMPROVE INSERT STATEMENT USING REVERSE INDEX】相关推荐

  1. mysql非必现数据插不进去_MySQL必知必会:数据插入(Insert)

    本篇文章介绍如何使用Insert语句将数据插入到数据库. 数据插入 增删改查是数据库最常用的4个命令,插入算是第二常用,第一是SELECT.插入数据的方式大概有4种插入完整的行 插入行的一部分 插入多 ...

  2. MySQL必知必会:数据插入(Insert)

    本篇文章介绍如何使用Insert语句将数据插入到数据库. 数据插入 增删改查是数据库最常用的4个命令,插入算是第二常用,第一是SELECT.插入数据的方式大概有4种 插入完整的行 插入行的一部分 插入 ...

  3. 〖Python 数据库开发实战 - MySQL篇㉔〗- 数据插入操作 - INSERT语句

    万叶集

  4. Mysql 数据插入 修改删除

    MYSQL基础上机练习题(二) 数据插入.修改.删除 一.实验目的: 数据插入.修改.删除 数据表的复制 字段分列 二.实验内容: 对实验一所展示的表进行数据输入.修改.删除  以下为Employee ...

  5. 使用 T-SQL 语句对数据库表进行单个数据插入、成批数据插入、修改和删除数据操作的介绍

    增删改语句的介绍: 一.单个数据插入语句 INSERT INTO 表名 [(属性列 1,属性列 2 - )] VALUES (常量 1 ,常量 2 - ) 说明: ① 插入一个新元组,新元组属性列 1 ...

  6. 将数据插入SQL Server的方法

    摘要 (Summary) There are a variety of ways of managing data to insert into SQL Server. How we generate ...

  7. mybatis 批量将list数据插入到数据库

    mybatis 批量将list数据插入到数据库 <select id="selectExistsLightName" parameterType="java.uti ...

  8. 分布式实时分析数据库citus数据插入性能优化

    前言 从可靠性和使用便利性来讲单机RDBMS完胜N多各类数据库,但当数据量到了一定量之后,又不得不寻求分布式,列存储等等解决方案.citus是基于PostgreSQL的分布式实时分析解决方案,由于其只 ...

  9. 【总结】大规模数据测试,数据准备时需要注意的问题(【保护已有数据】【大规模数据影响普通测试】【不要着急删除数据】)

    有时我们要进行大规模的数据测试,要往DB中插入大量的数据. 一下有三点是我们要考虑的: [保护已有数据] 这么做有两个目的 1.我们只想对我们插入的数据进行测试. 2.我们在测试结束之后,还要删除我们 ...

最新文章

  1. php禁止代理ip访问_php禁止某ip或ip地址段访问的方法
  2. 电脑桌面锁屏怎么设置_华为手机总是莫名多出照片?这两个设置不关闭,内存再大也不够用...
  3. 使用Seq搭建免费的日志服务
  4. 线上一个数组查询遇到的坑
  5. python脚本批量登录crt_Python实现批量新建SecureCRT Session
  6. 江苏专转本计算机基础资料,江苏专转本计算机基础复习资料
  7. QoS流量监管和流量整形配置实例
  8. VB.net取整和模操作
  9. java中getHeight是什么意思_Java PImage.getHeight方法代码示例
  10. 嵌入式Linux,4G模组驱动,移远EC20、EC25使用随笔-内核kernel
  11. 《延禧攻略》的配色,简直美到爆!
  12. 微电子科学与工程是否属于计算机类专业,微电子科学与工程专业属于什么学科...
  13. smartsvn基本操作
  14. oracle 停掉job,oracle 如何停job
  15. Oracle PeopleSoft 登录,peoplesoft不能登录DB解决方法
  16. 老照片还原当年穿着潇洒雷锋(组图)
  17. mtk audio笔记
  18. 常用git 命令备忘
  19. Linux计划任务要怎么弄?
  20. Trac中的Ticket系统

热门文章

  1. 百练OJ:1007:DNA排序
  2. 【企业管理】正确评价价值-概述
  3. 【贵州】2021年下半年软考报考时间及通知
  4. org.dom4j.DocumentException: 20 Nested exception: 20
  5. 人生第一次手术:0806
  6. springmvc返回数据中文乱码
  7. 项目立项管理:项目建议
  8. Vue+Openlayers+Draw实现画笔切换功能,切换画笔为点、线、面
  9. Fabricjs对Canvas画布和对象的事件监听
  10. Leaflet中使用layerGroup图层组实现图层切换