создать индекс catsearch для значений, разделенных запятыми, в oracle - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть несколько столбцов в таблицах оракула, которые содержат «коды ошибок»

ID   DESC   ERROR_CODE
=========================
01   ITM1   01,03,06
02   ITM2   04,05,16
03   ITM3   00,15

В настоящее время существует множество запросов, использующих LIKE %05%

Возможно лисоздать в оракуле индекс, который будет анализировать все «слова» между запятыми, а затем использовать CATSEARCH для поиска, чтобы значения могли быть проиндексированы?

Часто несколько кодов ошибок отфильтровываются изрезультаты.

WHERE ERROR_CODE NOT LIKE '%05%'
AND ERROR_CODE NOT LIKE '%15%'
AND ERROR_CODE NOT LIKE '%10%'

Я хотел бы повысить производительность этих запросов фильтра.
Система устарела, и я не могу изменить данные, по крайней мере, пока.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы пытались создать и настроить свой собственный лексер с нужными параметрами?( документация ) Возможно, что-то подобное может работать для вашего случая: (не проверено)

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...