sql - 我们可以添加什么来使 Oracle 中的查询运行更快?下面是 Oracle 查询缓慢
问题描述
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
注意:索引已应用于单列。
解决方案
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;
多列索引肯定会有所帮助。如果不知道表格的大小以及如何选择过滤器,就不是 100% 清楚最好的方法是什么。但我猜这会有很大帮助:
TRSANCTIONTABLEREQ(CUSTOMERID, STATUSCODE, BATCHID, STATUSCODE, ACCRUALPTS)
TrsanctionTable(TRNREQID, STATUSCODE, CARDID)
CARDTABLE(CARDID)
推荐阅读
- scala - 将数组结构拆分为单值列 Spark scala
- python - 张量流中RMSPROP优化器的初始化
- json - Hive 将 JSON 数组中的每个 JSON 元素分解为行
- python - 为什么烧瓶重定向给我一个空白页?
- html - 为网页添加动画
- python-multiprocessing - 如何获取python的多处理数组'指针并将其传递给Cpp程序?
- java - 由于 web.xml 或 servlet.java,本地主机上的服务器 Tomcat v8.5 服务器无法启动 Eclipse
- java - 用于文本分析的 Elasticsearch 分析器
- sql-server - 来自同一个表的多个插入,但第二个插入需要来自第一个插入的标识
- javascript - 从 Nodejs express 应用程序发布到 MySQL 数据库返回 404