所以我的这个表有一个全文索引列“value”。该字段包含一些数字字符串,当我使用如下查询时正确返回:
select value
from mytable
where value like '17946234';
麻烦的是,它非常慢,因为这个表中有很多行,但是当我使用CONTAINS运算符时,我没有得到任何结果:
select value
from mytable
where CONTAINS ( value, '17946234',1)>0
有人有任何想法吗?
不幸的是,我不是Oracle老兄,同样的查询在SQL Server中运行良好。我觉得它必须是一个停止列表,或者我可以更改Oracle Lexer的东西,但不确定如何。
答案 0 :(得分:0)
这可能是由于INDEXTYPE IS CTXSYS.CONTEXT
一般,或者在查找添加的记录之后未更新的索引(CONTEXT
类型索引不是事务性的,而CTXCAT
类型索引是)。
但是,如果你在语句中没有意外丢失通配符(换句话说:如果确实不需要通配符。),你可以只查询
select value from mytable where value = '17946234';
可能由普通索引支持。 (根据您的特定数据分布和运行的查询,索引可能无助于查询性能。) 否则
select value from mytable where instr(value, '17946234') > 0;
可能就足够了。