Похоже, вы уже знаете, что LIKE с лидирующим подстановочным знаком ('% ABC') общеизвестно неэффективен, поскольку обычно не может использовать индексы и выполняет полное сканирование таблицы.
Если другие предложения по оптимизации мало помогают, вы, вероятно, увидите более высокую производительность при использовании индекса контекста.Обязательно установите параметр SUBSTRING_INDEX, чтобы он специально подготовил индекс для инфиксных поисков, подобных вашему. См. Спросите Тома для более подробной информации .(Если вы также будете иметь подстановочные знаки в середине строк ('ABC% DEF'), вы также можете установить параметры PREFIX.)
begin
ctx_ddl.create_preference('SUBSTRING_PREF','BASIC_WORDLIST');
ctx_ddl.set_attribute('SUBSTRING_PREF','SUBSTRING_INDEX','TRUE');
end;
create index matter_title_idx on MATTER(MATTER_TITLE)
indextype is ctxsys.context
parameters ('wordlist SUBSTRING_PREF');
Также обратите внимание, что индексы контекста нечувствительны к региструпо умолчанию, поэтому вам не нужно делать UPPER ().Я не пробовал использовать литералы q 'с содержанием, поэтому не уверен, как это будет работать.
AND CONTAINS(dm.MATTER_TITLE, q'{%jdasuidhajsndjahs%}') > 0