Оптимизация поиска по запросу Oracle - PullRequest
1 голос
/ 15 июня 2011

Я пытаюсь оптимизировать запрос Oracle, который выглядит следующим образом:

select * from upcTable where upc like '%567%'

Запрос выполняется для небольших поисковых терминов, таких как 567, однако он может содержать до 15 цифр, в которых он можетзаймет ~ 1,5 секунды.Есть ли способ ускорить это?

Я пытался сделать что-то вроде

select * from
(select * from rldb.productmaster where upc like '%567%')
where upc like '%380%'

select * from rldb.productmaster where upc like '%567380%'

В этом случае количество терминов примерно одинаковое, но первый пример немногоБыстрее.Однако при использовании той же техники для 15 цифр это немного быстрее, но все еще слишком медленно.

Ответы [ 2 ]

5 голосов
/ 15 июня 2011

Если индексировать столбец следующим образом:

create index upcIndex on upcTable (upc, pk);

(где pk - первичный ключ таблицы)

, тогда этот запрос может выполнить INDEX FAST FULL SCAN дляэтот индекс:

select pk from upcTable where upc like '%567380%';

Если вам действительно нужны все столбцы (выберите *), вы можете попробовать это:

select * from upcTable where pk in
(select pk from upcTable where upc like '%567380%');
1 голос
/ 15 июня 2011

вы не будете использовать какие-либо индексы с% 123% (ведущий%).Если вы можете выполнять поиск с использованием «123%», тогда вы можете воспользоваться индексом.

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