即使具有parallel(8)提示,具有百万条记录的表中的Count(1)还是很慢

Div*_*Sam 2 sql oracle performance query-optimization oracle11g

我正在尝试从具有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));
Run Code Online (Sandbox Code Playgroud)

这是执行计划:

[[执行计划]

查询给出了结果,但花了2个小时才计算出1.94亿。

编辑:


修改过的代码可根据Littlefoot的建议添加DATE。使用实际列名编辑的代码。我是堆栈溢出的新手,因此已将计划作为映像进行了附加。

Lit*_*oot 5

另外,如果compensationdateDATE数据类型,请不要将其与字符串(因为'28-JUL-17' 字符串)进行比较,并强制Oracle执行隐式转换并花费时间在空上。切换到

compensationdate BETWEEN date '2017-07-28' and date '2018-01-26'
Run Code Online (Sandbox Code Playgroud)