我们有一个查询,需要48分钟才能对Clob进行搜索。查询被编写为好像不是clob列,并使用contains和near。在彼此之间一定单词距离内搜索3个单词很重要。我需要加快速度,并希望在Clob上做一个索引,但是不知道这样是否行得通,并且不完全了解如何做。我是从汤姆·伯勒森(Tom Burleson)找到的 http://www.dba-oracle.com/t_clob_search_query.htm或https://asktom.oracle.com/pls/apex/asktom.search?tag=oracle-text-contains-search-with-near-is-very-slow ,但无法弄清楚如何使用contains和near来搜索彼此相距一定距离的3个单词。
当前脚本:
SELECT clob_field
FROM clob_table
WHERE contains(clob_field,'NEAR (((QUICK),(FOX),(LAZY)),5)') > 0;
如果要像建立索引一样使用以下内容:
SELECT clob_field
FROM clob_table
WHERE contains(dbms_lob.substr(clob_field,'near(((QUICK),(FOX),(LAZY)),5)')) > 0;
如果没有,我需要做索引,但是我不太了解如何使用CTXCAT和CONTEXT(https://docs.oracle.com/cd/A91202_01/901_doc/text.901/a90122/ind4.htm)。我也不喜欢我在这里读到的内容,即如果使用CTXCAT索引Clob,则必须使用CONTEXT或类似的东西。它不会影响在此字段上执行的其他查询。
谢谢!
答案 0 :(得分:0)
除非它被全局索引,否则包含的内容将无法工作,因此我不得不对字段进行索引,然后才能使原始查询正常工作。