我对学习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)?
答案 0 :(得分:2)
不幸的是,没有办法改变DQL转换为结果SQL的默认Documentum行为。
但是您可以使用JDBC在自定义应用程序,作业,BOF,组件等中直接执行SQL。对于除SELECT
之外的查询,还可以使用DQL EXECUTE
语句,如下所示:
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不建议使用这种方法直接访问其内部表,但是当您确实需要加快应用程序速度时,则必须使用其他方法。
无论如何,我建议首先使用索引,如果索引不够准确,则可以继续执行上述步骤。