如下所示,我的表 A 和 B 之间有一个简单的连接。此外,每个表上都有一个与 Or 运算符组合的条件。
SELECT /*+ NO_EXPAND */
* FROM IIndustrialCaseHistory B ,
IIndustrialCaseProduct A
where (
A.ProductId IN ('9_2') OR
contains(B.KeyWords,'%some text goes here%' ) <=0
)
and ( B.Id = A.IIndustrialCaseHistoryId)
在 ProductId 上定义了一个 b-tree 索引,对于 KeyWords 有一个函数索引。但我不知道为什么我的执行计划不使用这些索引并执行完整的表访问?正如我在此URL 中发现的那样,NO_EXPAND 优化提示可能会在执行计划中使用索引(NO_EXPAND 提示可防止基于成本的优化器考虑对 WHERE 子句中具有 OR 条件或 IN 列表的查询进行 OR 扩展)。但我没有看到定义索引的任何用途
我的查询有什么 oracle 问题?!