2

所以我有一个带有全文索引列“值”的表。该字段包含一些数字字符串,当我使用这样的查询时会正确返回:

select value
    from mytable 
    where value like '17946234';

麻烦的是,它非常慢,因为该表中有很多行,但是当我使用 CONTAINS 运算符时,我没有得到任何结果:

select value
    from mytable
    where CONTAINS ( value, '17946234',1)>0

有人有什么想法吗?

不幸的是,我不是 Oracle 的老兄,同样的查询在 SQL Server 中运行良好。我觉得它必须是一个停止列表或我可以更改的 Oracle Lexer 的东西,但不确定如何更改。

4

1 回答 1

1

这可能是由于INDEXTYPE IS CTXSYS.CONTEXT一般情况下,或者在查找添加的记录后索引没有更新(CONTEXT类型索引不是事务CTXCAT性的,而类型索引是)。

但是,如果您没有意外丢失语句中的通配符(换句话说:如果确实不需要通配符。),您可以只查询

select value from mytable where value = '17946234';

这可能由普通索引支持。(根据您的特定数据分布和运行的查询,索引可能无助于查询性能。)否则

select value from mytable where instr(value, '17946234') > 0;

可能就足够了。

于 2014-11-11T21:51:24.287 回答