oracle跳过检查建索引,oracle - 使用PARALLEL提示时Oracle跳过索引 - 堆栈内存溢出

我正在使用Oracle数据库“ Oracle Database 12c企业版12.1.0.2.0 64位”

我正面临一种行为,我不知道这是对还是错。

例如下面的查询

SELECT *

FROM (SELECT x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1

FROM HHH

WHERE s = 0

AND v_Date <= TO_DATE('20191110','YYYYMMDD')

AND t_Date >= TO_DATE('20191110','YYYYMMDD')

WHERE ROW1 = 1

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8yckV4RC5qcGc=

我创建了一个索引,如下所示:

CREATE INDEX IDX_HHH_S_V_T_DATE ON HHH (S, v_date desc, t_date desc) compute statistics

优化器总是选择该索引,但是当我提到“并行”提示时:

SELECT *

FROM (SELECT /*+ PARALLEL(8) */ x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1

FROM HHH

WHERE s = 0

AND v_Date <= TO_DATE('20191110','YYYYMMDD')

AND t_Date >= TO_DATE('20191110','YYYYMMDD')

WHERE ROW1 = 1

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9aVmhCSy5qcGc=

优化器选择跳过该索引。

我尝试过的解决方案仍然相同:

我将表更改为平行8

我将索引更改为并行8

当尝试通过“ INDEX”提示强制优化器使用索引时:

SELECT *

FROM (SELECT /*+ PARALLEL(8) INDEX(HHH (IDX_HHH_S_V_T_DATE))*/ x, y, z, ROW_NUMBER() OVER (PARTITION BY x ORDER BY last_date DESC) ROW1

FROM HHH

WHERE s = 0

AND v_Date <= TO_DATE('20191110','YYYYMMDD')

AND t_Date >= TO_DATE('20191110','YYYYMMDD')

WHERE ROW1 = 1

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8zWVpycC5qcGc=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值