首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Peoplesoft查询-性能

Peoplesoft查询-性能
EN

Stack Overflow用户
提问于 2010-03-17 16:11:51
回答 2查看 2.1K关注 0票数 2

我在PeopleSoft查询方面遇到了一个问题(使用Oracle后端数据库):当用户触发涉及多个记录的相当复杂的查询时,PS会强制连接安全记录,从而生成如下所示的SQL:

选择..。从…

ps_job a,PS_EMPL_SRCQRY a1,ps_table2 b,ps_sec_rcd2 b1,ps_table3 c,ps_sec_rcd3 c1

其中(...security连接a->a1,b->b1,c->C1.)和( a,b和c的...joins.)和

a.setid_dept = 'XYZ';

(假设最后一个条件具有很高的选择性,列上有一个索引)显然,由于条件的排列,首先创建一个巨大的联接,写入临时段,当最后一个条件被应用时,只选择一个小的子集。以这种方式编写的查询很可能会命中APPSRV,甚至QRYSRV的预设超时。在手动编写查询时,我宁愿将最有选择的条件移到起始位置,从而将所处理的数据量限制在相当大的级别上。

对于如何使PS表现成这样,有什么想法吗?实际上,已经将“Oracle样式”SQL重写为ANSI SQL似乎加速了查询--然而,PS编写Oracle风格的查询.

提前感谢

DBa

EN

回答 2

Stack Overflow用户

发布于 2012-05-12 09:46:38

除了Grant的建议之外,另一种方法是在用户将查询和执行正常联接的表上创建视图。

对于上面的内容,您必须- 1.为查询中使用的每个记录创建视图。2.将视图添加到查询安全树中。3.使用PS查询中的视图。这将在视图上执行正常的联接,并在联接中没有安全记录。

要对数据执行用户级别的安全性,您可以有另一个安全视图并将其加入到最终查询中,并且在where子句中有一个条件检查当前登录的用户。

这样,就可以创建固定数量的视图,而不是为每个用户查询创建视图。

票数 2
EN

Stack Overflow用户

发布于 2010-03-19 22:17:42

我所知道的唯一的解决办法是强制它以它应该做的方式进行连接,而不是它所做的方式(并避免可怕的合并连接Cartesian),就是创建一个正确地进行连接的视图。

  • 用正确的字段创建记录。
  • 使其类型为SQL视图。
  • 粘贴到您的SQL中,现在可以工作了。
  • 将其添加到查询安全树中。
  • 刷新安全缓存.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2463881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档