gpt4 book ai didi

oracle - Peoplesoft 查询 - 性能

转载 作者:行者123 更新时间:2023-12-04 06:56:51 25 4
gpt4 key购买 nike

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

select .... from
ps_job a, PS_EMPL_SRCQRY a1, ps_table2 b, ps_sec_rcd2 b1, ps_table3 c, ps_sec_rcd3 c1
where (...security joins a->a1, b->b1, c->c1...) and (...joins of a, b and c...) and
a.setid_dept = 'XYZ';



(假设最后一个条件具有高选择性并且列上有索引)
很明显,由于条件的安排,首先创建了一个巨大的join,写入到temp段中,最后应用最后一个条件时,只选择了一个很小的子集。以这种方式制定的查询很可能会达到 APPSRV 甚至 QRYSRV 的预设超时。手动编写查询时,我宁愿将最具选择性的条件移到开头,从而将处理的数据量限制在相当大的水平。
关于如何让 PS 表现得像这样的任何想法?实际上,已经将“Oracle 风格”的 SQL 重写为 ANSI SQL 似乎可以加速查询——但是,PS 编写了 Oracle 风格的查询......

提前致谢
数据库

最佳答案

除了 Grant 所建议的,另一种方法是在用户查询和执行正常连接的表上创建 View 。

对于上述情况,您必须-
1. 为将在查询中使用的每条记录创建 View 。
2. 将 View 添加到查询安全树中。
3. 使用 PS 查询中的 View 。这将对 View 执行正常联接,并且联接中将没有安全记录。

为了对数据实现用户级安全,您可以拥有另一个安全 View 并将其加入最终查询,并在 where 子句中设置一个条件来检查当前登录的用户。

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

关于oracle - Peoplesoft 查询 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463881/

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