【发布时间】:2020-11-13 21:18:36
【问题描述】:
我有一个要优化的查询。这是查询:
SELECT "c"."NETSW_ACQEREF" AS "BANK",
count("c"."NETSW_ACQEREF") AS "QTY",
sum("c"."TRAN_AMNT") / 100 AS "AMOUNT",
count(distinct "c"."TERM_ID") as "terminals"
FROM "CSCLWH"."CLWH_COMMON_DATA" "c"
WHERE ("c"."TRAN_DATE" between 20201101 AND 20201111)
AND ("TRAN_TYPE" IN
('00', '01', '10', '12', '19', '20', '26', '29', '50', '51', '52'))
AND ("RESP_CODE" IN ('0', '00', '000', '400'))
AND ("MTI" IN ('1100', '1200', '1240', '1400', '1420'))
GROUP BY "c"."NETSW_ACQEREF"
ORDER BY "BANK"
这些是成本巨大的解释计划结果:
Cost 5102095 Time 00:03:20
它有我按索引创建的 300 万行日期,但它的用处不大。你能告诉我一个降低成本的方法吗?
【问题讨论】:
-
为什么要将交易日期与数字(20201101 和 20201111)进行比较?交易日期列是否为 NUMBER 数据类型?这可能是一个重大问题。即使您对该列有索引,如果数据类型错误,索引也不会有太大帮助——即使它会帮助很大(如果数据类型是 DATE)。
标签: sql oracle optimization