gpt4 book ai didi

java - 优化查询 : DBMS_METADATA. GET_DDL (Oracle)

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:47 24 4
gpt4 key购买 nike

我想获取所有表的所有表定义。我想快速完成(这是我经常运行的脚本的一部分)

我使用的是 oracle 11g,我有 700 个表。在普通的 jdbc 代码上,它需要 4 分钟并执行以下操作:

s = con.statement("select DBMS_METADATA.GET_DDL(object_type,object_name) from user_objects where object_type = 'TABLE');
s.execute();
rs = s.getResultSet();
while(rs.next()){
rs.getString(1);
}

所以我想优化这段代码并达到 20 秒左右。

我已经通过创建 14 个线程达到了 40-50 秒,每个线程都打开一个到数据库的连接并读取部分信息,在 rownum 上使用 mod。

但这还不够。

我正在考虑这些方向:

  1. http://docs.oracle.com/cd/B10501_01/java.920/a96654/connpoca.htm#1063660 - 连接缓存。它可以通过用 connectionCaching 替换我的 14 个连接来帮助加快速度吗?

  2. 是否可以将此函数访问的表保留在 KEEP 缓冲区缓存区域中?

  3. 要为这里的一些信息编制索引吗?

  4. 如有任何其他建议,我们将不胜感激。

谢谢

最佳答案

即使表未更改,是否也需要始终获取 DDL?否则仅获取自上次检索以来 ALL_OBJECTS.LAST_DDL_TIME 已更改的那些表的 DDL。

另一种选择是以一种能够同时获取多个表的方式编写您自己的 GET_DDL。

关于java - 优化查询 : DBMS_METADATA. GET_DDL (Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com