0

我是学习 Documentum 的新手,我们遇到了这个由系统运行的查询,我们正在研究如何加速:

    SELECT ALL dm_document.r_object_id
    FROM dm_document_sp dm_document
    WHERE (
      dm_document.object_name = :"SYS_B_0"
      AND dm_document.r_object_id IN (
        SELECT r_object_id
        FROM dm_sysobject_r
        WHERE i_folder_id = :"SYS_B_1"
      )
    )
    AND (
      dm_document.i_has_folder = :"SYS_B_2"
      AND dm_document.i_is_deleted = :"SYS_B_3"
    )

我们研究了添加索引或使用 SQL 配置文件。但是,该指数会有些大,并将继续增长。SQL 配置文件也需要定期重新检查。

我们认为重新编写 SQL 本身会更好。有没有一种方法可以覆盖系统以对 Documentum 自动生成的特定查询使用自定义 SQL(即开发人员编写的 SQL)?

4

1 回答 1

2

不幸的是,无法更改将 DQL 转换为结果 SQL 的默认 Documentum 行为。

但是您可以使用 JDBC 在您的自定义应用程序、作业、BOF、组件等中直接执行 SQL。除了SELECT查询之外,也可以使用 DQLEXECUTE语句,如下所示:

EXECUTE exec_sql WITH query = 'sql_query'

另一种选择是注册特定的 *_s 或 *_r 表并在 DQL 中直接访问它们。例如,您可以dm_sysobject_s像这样注册:

REGISTER TABLE dm_dbo.dm_sysobject_s ("r_object_id" CHAR(16))

然后你可以在 DQL 中使用它:

SELECT object_name FROM dm_sysobject_s

并且您也可以在 DQL 中将注册表与 Documentum 类型正常连接,例如:

SELECT object_name FROM dm_sysobject_s s, dmi_queue_item q WHERE s.r_object_id = q.item_id

但请记住,Documentum 不推荐使用这种方法直接访问其内部表,但是当您确实需要加速应用程序时,您必须使用其他方法。

无论如何,我建议首先使用索引,如果它不够,那么您可以继续执行上述步骤。

于 2019-08-07T06:56:59.253 回答