热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle中从XMLType列提取数据并插入到VARCHAR2列:性能优化

本文讨论了在Oracle10gR2和Solaris1064-bit环境下,从XMLType列中提取数据并插入到VARCHAR2列时遇到的性能问题,并提供了优化建议。

在 Oracle 10gR2 (10.2.0.4) 和 Solaris 10 64-bit 环境下,我需要从一个包含 XML 数据的表(word.testmeta)中提取特定的数据值,并将其插入到另一个表(word.testwordyy)中。

以下是两个表的结构:

word.testmeta 表结构:

NAME         NULL?    TYPE
--------------------------------------
FILENAME     CHAR(2000)
XMLDATA      XMLTYPE

word.testwordyy 表结构:

NAME         NULL?    TYPE
---------------------------------------
ID           VARCHAR2(255)
KEYWORD      VARCHAR2(4000)

为了实现这一目标,我使用了 XMLTABLE 函数,并执行了以下 SQL 语句:

INSERT /*+ APPEND */ INTO word.testwordyy (KEYWORD)
SELECT /*+ GATHER_PLAN_STATISTICS */ DBMS_LOB.SUBSTR(XMLTYPE.GETCLOBVAL(b.KEWOR), 254)
FROM word.testmeta, XMLTABLE (
    '$B/mets/KEWOR'
    PASSING word.testmeta.XMLDATA AS B
    COLUMNS KEWOR XMLTYPE PATH '/KEWOR/text()'
) b;

通过执行以下命令获取执行计划:

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'IOSTATS LAST'));

执行计划如下:

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------
SQL_ID 37ua3npnxx8su, child number 0
-------------------------------------
insert /*+ APPEND */ into word.testwordyy(KEYWORD) select /*+ GATHER_PLAN_STATISTICS */
dbms_lob.substr(xmltype.getclobval(b.KEWOR),254) from word.testmeta , xmltable ( '$B/mets/KEWOR' passing
> word.testmeta.XMLDATA as B columns KEWOR xmltype path '/KEWOR/text()' ) b
Plan hash value: 875848213
-----------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name               | Starts | E-Rows | A-Rows | A-Time   | Buffers | Reads | Writes |
-----------------------------------------------------------------------------------------------------------------------------------
|  1  | LOAD AS SELECT                     |                    |      1 |        |      1 | 00:10:32.72 |   16832 |     7 |    90 |
|  2  | NESTED LOOPS                       |                    |      1 |  29M   |  34688 | 00:00:25.95 |   12639 |     5 |     0 |
|  3  | TABLE ACCESS FULL                  | TESTMETA           |      1 |   3638 |   3999 | 00:00:00.08 |     909 |     0 |     0 |
|  4  | COLLECTION ITERATOR PICKLER FETCH  | XMLSEQUENCEFROMXMLTYPE |   3999 |        |  34688 | 00:00:24.50 |   11730 |     5 |     0 |
Note
-----
- dynamic sampling used for this statement
21 rows selected.

随着表 word.testmeta 中行数的增加,每行的处理时间也在增加。特别是当行数超过 8000 时,处理速度变得非常慢,需要几个小时才能完成。

虽然我的 XML 数据简单且体积较小,但需要处理大量的 XML 文件(约 500 万个)。因此,寻找一种优化或更快的处理方法显得尤为重要。

以下是一些可能的优化建议:

  • 索引优化: 在 word.testmeta 表上创建适当的索引,以提高查询性能。
  • 批处理插入: 使用批量插入而不是单行插入,以减少 I/O 操作。
  • 并行处理: 利用 Oracle 的并行处理功能,将任务分解为多个并行进程,以加速处理速度。
  • 优化 XML 解析: 尝试使用更高效的 XML 解析方法,例如使用 PL/SQL 函数来解析 XML 数据。

希望这些建议能帮助您解决性能问题。


推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 深入理解 ASP.NET 中的 System.BitConverter 类
    在 ASP.NET 开发中,System.BitConverter 类提供了一组静态方法,用于将基本数据类型(如整数、浮点数、字符和布尔值)转换为字节数组(Byte[]),同时也支持反向操作。本文将详细介绍 BitConverter 类的主要成员及其应用实例。 ... [详细]
  • 在CentOS上构建Ntopng实时网络流量监控平台
    本文详细介绍了如何在CentOS操作系统上安装和配置Ntopng,一个强大的网络流量监控工具。Ntopng能够提供实时的网络流量分析,并通过Web界面展示详细的流量报告。 ... [详细]
author-avatar
白云朵朵12
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有