You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库中执行计划未使用虚拟列索引问题求助

问题解决建议

问题根源

你的CONTENT_HASH虚拟列是STANDARD_HASH函数返回的RAW类型,但执行计划的谓词显示Oracle自动对该列做了RAWTOHEX转换(RAWTOHEX("CONTENT_HASH")=:1)——这种对索引列施加的函数操作,导致基于原始RAW值创建的唯一索引无法被利用,只能触发全表扫描。

具体解决办法

1. 修正MERGE的ON条件(推荐)

将绑定变量:1从十六进制字符串转换为RAW类型,而非让索引列做转换。修改后的MERGE语句如下:

MERGE INTO CONTENT 
USING DUAL ON (CONTENT_HASH = HEXTORAW(:1))
WHEN NOT MATCHED THEN
 INSERT (CONTENT, METADATA)
 VALUES(:2, :3)
WHEN MATCHED THEN
 UPDATE SET METADATA = :4

调整后,Oracle会直接用RAW类型的绑定变量与索引列匹配,CONTENT_HASH_IDX索引就能被正常调用,避免全表扫描。

2. 调整绑定变量类型

如果应用端可以修改,直接将:1以RAW类型传入(而非十六进制字符串)。此时原MERGE语句的CONTENT_HASH = :1就能直接匹配索引列,无需任何转换操作。

3. 验证效果

修改后执行EXPLAIN PLAN查看执行计划,若出现INDEX UNIQUE SCAN CONTENT_HASH_IDX的操作项,说明索引已被正确利用。

内容的提问来源于stack exchange,提问作者Sourcerer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:05:08