sql - 即使使用并行(8)提示,具有百万条记录的表中的计数(1)也很慢

标签 sql oracle performance oracle11g query-optimization

我正在尝试从拥有 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));

这是执行计划:

[[Execution plan ]

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

编辑:


编辑代码以根据 Littlefoot 的建议添加日期。 使用实际列名称编辑的代码。 我是堆栈溢出的新手,因此附上了计划作为图像。

最佳答案

此外,如果 compensationdateDATE 数据类型,请勿将其与字符串进行比较(因为 '28-JUL-17 ' 一个字符串)并强制 Oracle 执行隐式转换并花费时间什么都没有。切换至

compensationdate BETWEEN date '2017-07-28' and date '2018-01-26'

关于sql - 即使使用并行(8)提示,具有百万条记录的表中的计数(1)也很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387920/

相关文章:

sql - View 可以更新/插入/删除吗?如果是,在什么条件下?

sql - MySQL: key 2 的重复条目

php - 将表情符号从 php Web 应用程序传递到 Oracle 数据库和 mysql

python - 重温嵌套的Python循环

algorithm - 实现Stack的高效算法是什么?

sql - 同时使用 group by 和 order by 查询时间慢

sql - 表别名如何影响性能?

java - 将当前时间插入表中

ruby - Ruby 中是否有 nvl() 函数,还是我必须自己编写?

c# - LINQ 的 SQL 脚本