【发布时间】:2023-02-03 11:03:13
【问题描述】:
该视图有多个连接,但没有WHEREcloses。它帮助我们的开发人员在一个 appian 对象中获得所需的所有数据,以后可以在“低代码”中轻松使用这些数据。在大多数情况下,Appian 在随后的 WHERE 子句中添加条件来查询视图上的数据,如下所示:
query: [Report on Record Type], order by: [[Sort[histoDateAction desc], Sort[id asc]]],
filters:[((histoDateAction >= TypedValue[it=9,v=2022-10-08 22:00:00.0])
AND (histoDateAction < TypedValue[it=9,v=2022-10-12 22:00:00.0])
AND (histoUtilisateur = TypedValue[it=3,v=miwem6]))
]) (APNX-1-4198-000) (APNX-1-4205-031)
现在我们开始在数据库中存储数据,性能下降。原因似乎是,从执行计划的角度来看,查询在查询数据时不使用索引。
以下是视图 VIEW_A 的查询:
SELECT
<columns> (not much transformation here)
FROM A
LEFT JOIN R on R.id=A.id_type1
LEFT JOIN R on R.id=A.id_type2
LEFT JOIN R on R.id=A.id_type3
LEFT JOIN U on U.id=A.id_user <500>
LEFT JOIN C on D.id=A.id_customer <50000>
LEFT JOIN P on P.id=A.id_prestati <100000>
在当前,Appian 添加了以下条款:
where A.DATE_ACTION < to_date('2022-10-12 22:00:00', 'YYYY-MM-DD HH24:MI:SS')
and A.DATE_ACTION >= to_date('2022-10-08 22:00:00', 'YYYY-MM-DD HH24:MI:SS')
and A.USER_ACTION = 'miwem6'
通常,当我展示 VIEW_A WHERE <conditions> 的解释计划时,我有一个成本大约 6'000,当我展示 <code of the view> where <clause> 的解释计划时,成本是 30。
是否可以使用一些 Oracle 提示来告诉它:“有一天,有人会查询这个在某些列上添加 WHERE 子句,所以不要成为一个愚蠢的引擎并在时机成熟时使用索引”?
【问题讨论】: