【发布时间】:2021-07-09 05:41:00
【问题描述】:
SELECT NVL(SUM(TRN.ACCRUALPTS), 0) AS ACCRUALPTS
FROM TrsanctionTable REQ INNER JOIN
TRSANCTIONTABLEREQ TRN ON TRN.TRNREQID = REQ.TRNREQID INNER JOIN
CARDTABLE CARD ON CARD.CARDID = TRN.CARDID
WHERE TRN.CUSTOMERID = 4082
AND TRN.STATUSCODE = '2220'
AND REQ.STATUSCODE = '00'
AND TRN.BATCHID IS NULL;
上面的查询需要很长时间才能执行,您能否建议我如何重写或更改此查询以更快地运行。我的团队建议在此查询上添加复合索引。
他们还有什么其他方法可以降低此 QUERY 的成本
此查询的费用为 102K
注意:索引已应用于单列。
【问题讨论】:
-
嗨齐亚德。能否请您发布带有对象名称和访问方法的完整解释计划?
-
在没有在任何地方使用的情况下包含表 CARDTABLE 的目的是什么?
-
CARDTABLE 上的连接看起来不需要。除非您需要它来排除 TRN.CARDID 无效的记录?
-
请使用
/*+GATHER_PLAN_STATISTICS*/提示执行您的查询,并粘贴来自select * from table(dbms_xplan.display_cursor(format => 'BASIC +PREDICATE ALLSTATS LAST'))的文本输出,该输出应在您的查询之后执行。 -
@NickW 在 CARDTABLE 上有一个连接,完成交易的卡是否有效
标签: sql oracle oracle11g oracle-sqldeveloper