在Documentum应用程序中检索对象时需要很长时间。我们在数据源och中激活了长时间运行的查询选项,但是发现下面的查询占用了太多时间:
select all
b.r_object_id, dm_repeating1_0.state_name, a.object_name
from
dm_policy_sp a,
dm_sysobject_sp b,
dm_policy_rp dm_repeating1_0
where
(
(a.r_object_id=b.r_policy_id)
and (dm_repeating1_0.i_state_no=b.r_current_state)
and b.r_object_id in (N'a long, long list of IDs')
or a.r_object_id in (N'a long, long list of IDs')
)
and /* ... */
如您所见,表“a”是一个策略表,它只有7条记录。在两个“或”运算符之后的SQL语句中,我们在表“a”中的100个对象之间寻找object_id
!我们执行了一个查询并在表“b”(systemObjects
)中搜索了这些对象,我们发现这些对象属于表b!
上述查询大约需要17分钟。当我们将表中的“或”运算符后面的表名改为b时,只花了10秒钟!
我们认为此查询错误。我们不知道它是否是Documentum中的错误,或者我们已将Documentum配置错误。我们不知道在哪里可以找到创建此SQL或相关组件的DQL?任何的想法?
答案 0 :(得分:1)
看起来documentum在LifecycleNameDataHandler和LifecycleDataHandlerHelper中完成。我反编译这些类并找到了这个DQL查询
选择b.r_object_id,a.state_name,a.object_name FROM dm_policy(全部)一个,dm_sysobject(全部)B,其中b.r_object_id IN(...)和a.r_object_id = b.r_policy_id AND a.i_state_no = b.r_current_state ENABLE(row_based)
当用户使用LifeCycle州名列打开任何数据网格时,Documentum Webtop会执行此DQL查询。
有几个选项:
答案 1 :(得分:0)
我不知道您希望通过此查询确切检索到什么,但我认为您的查询可能会按以下方式重新编写:
select all
b.r_object_id, dm_repeating1_0.state_name, a.object_name
from
dm_policy_sp a,
dm_sysobject_sp b,
dm_policy_rp dm_repeating1_0
where
(
(a.r_object_id=b.r_policy_id)
AND dm_repeating1_0.r_object_id=a.r_object_id
and (dm_repeating1_0.i_state_no=b.r_current_state)
and (b.r_object_id in (...)
or a.r_object_id in (...))
)