我在oracle表中有几列包含“错误代码”
ID DESC ERROR_CODE
=========================
01 ITM1 01,03,06
02 ITM2 04,05,16
03 ITM3 00,15
目前,有许多查询使用LIKE %05%
是否可以在oracle中构造一个索引来解析逗号之间的所有“单词”,然后使用CATSEARCH
进行搜索,以便可以对值进行索引?
通常会从结果中过滤出多个错误代码。
WHERE ERROR_CODE NOT LIKE '%05%'
AND ERROR_CODE NOT LIKE '%15%'
AND ERROR_CODE NOT LIKE '%10%'
我想提高这些过滤查询的性能。
该系统是旧系统,我无法重新设计数据,至少目前还不能。
答案 0 :(得分:2)
您是否尝试过使用所需参数创建和调整自己的词法分析器? (documentation)也许这样的方法可以解决您的问题:(未经测试)
begin
ctx_ddl.create_preference('comma_lexer', 'BASIC_LEXER');
ctx_ddl.set_attribute('comma_lexer', 'WHITESPACE', ',');
ctx_ddl.set_attribute('comma_lexer', 'NUMGROUP', '#');
end;
/
create index node_sequence_index
on error_table(error_code)
indextype is ctxsys.ctxcat
parameters ('lexer comma_lexer')
;
任意#
替换了NUMGROUP
的默认,
,因此它不会计算错误序列,例如150,020,030
作为一个数字。
索引类型为ctxsys.ctxcat
,以优化CATSEARCH
的索引。