【问题标题】:How make view use index如何让视图使用索引
【发布时间】:2023-02-03 11:03:13
【问题描述】:

该视图有多个连接,但没有WHEREcloses。它帮助我们的开发人员在一个 对象中获得所需的所有数据,以后可以在“低代码”中轻松使用这些数据。在大多数情况下,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 &lt;conditions&gt; 的解释计划时,我有一个成本大约 6'000,当我展示 &lt;code of the view&gt; where &lt;clause&gt; 的解释计划时,成本是 30。

是否可以使用一些 Oracle 提示来告诉它:“有一天,有人会查询这个在某些列上添加 WHERE 子句,所以不要成为一个愚蠢的引擎并在时机成熟时使用索引”?

【问题讨论】:

    标签: appian oracle view appian


    【解决方案1】:

    由于我们可能很快就没用了,这里是 ChatGPT 的答案:

    是的,您可以在视图定义中使用 Oracle 提示来为优化器提供有关如何执行查询的建议。优化器可能会也可能不会根据自己的优化规则和数据库统计信息遵循建议。

    您可以在视图定义的 SELECT 语句中添加提示以指定索引的使用。例如:

    SELECT /*+ INDEX(A DATE_ACTION_IDX) INDEX(U USER_IDX) */
    <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>;
    

    这里,提示INDEX(A DATE_ACTION_IDX)告诉优化器使用A表上的DATE_ACTION列的DATE_ACTION_IDX索引,提示INDEX(U USER_IDX)告诉优化器使用@987654328上的USER_IDX索引USER_ACTION列的@表。

    请注意,使用提示有时会产生意想不到的后果并对性能产生负面影响,因此请谨慎使用并彻底测试任何更改。

    【讨论】:

    • 哦,我知道了,我不知道怎么写提示,所以我不会用它们来尝试,但现在我想起来,看起来很明显要尝试。男人!我们注定要失败:(
    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 2013-03-16
    • 1970-01-01
    • 2017-03-31
    • 2011-01-13
    • 2011-12-16
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多