【发布时间】:2020-02-11 17:40:00
【问题描述】:
我正在尝试从具有 1.94 亿条记录的表中计算记录。使用了并行提示和索引快速扫描,但仍然很慢。请为附加的查询提出任何替代或改进想法。
SELECT
/*+ parallel(cs_salestransaction 8)
index_ffs(cs_salestransaction CS_SALESTRANSACTION_COMPDATE)
index_ffs(cs_salestransaction CS_SALESTRANSACTION_AK1) */
COUNT(1)
FROM cs_salestransaction
WHERE processingunitseq=38280596832649217
AND (compensationdate BETWEEN DATE '28-06-17' AND DATE '26-01-18'
OR eventtypeseq IN (16607023626823731, 16607023626823732, 16607023626823733, 16607023626823734));
这是执行计划:
[]
查询给出了结果,但计算了 1.94 亿需要 2 个小时。
编辑:
编辑代码以根据 Littlefoot 的建议添加 DATE。 使用实际列名编辑的代码。 我是堆栈溢出的新手,因此已将计划附加为图像。
【问题讨论】:
-
什么是es执行计划?
-
@WernfriedDomscheit 已将其作为图像附加。我是堆栈溢出的新手。所以不知道如何以可读的格式复制粘贴它。
-
通常您会使用
EXPLAIN PLAN FOR ... {your statement};和SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);或SELECT DBMS_XPLAN.DISPLAY_PLAN from dual;获得解释计划 -
"parallel(8) 提示":那么您的数据库服务器有多少 CPU?您执行此查询时还运行了什么?
-
@APC 这是我查询缓慢的原因之一。许多会话在后台运行。谢谢
标签: sql oracle performance oracle11g query-optimization