#oracle #full-text-search #query-optimization #sql-like
#Oracle #полнотекстовый поиск #оптимизация запросов #sql-подобный
Вопрос:
У меня довольно сложная таблица данных, но я сократил ее для более простого объяснения того, чего я пытаюсь достичь. Цель запроса — вернуть ID_NUMBER и TEXT_FIELD, где запись содержит «John» и «Jane» в любом месте поля, независимо от позиции или порядка.
ID_Number Text_Field
1000 John Doe
2000 Jane Doe
3000 John and Jane Doe
4000 Doe John Jane
Я могу легко запросить, чтобы найти все текстовые поля, в которых указано «John», используя LIKE ‘%JOHN%’, и я также могу запросить поиск «John» или «Jane» в любой части текстового поля, используя LIKE ‘%JOHN%’ И LIKE ‘%JANE%’ но, похоже, обработка запроса занимает очень много времени.
Есть ли более оптимальный способ записать эту логику в операторе WHERE?
Комментарии:
1. Использование операции LIKE с подстановочным знаком на каждом конце всегда является полным сканированием таблицы. Более эффективный подход заключается в использовании Oracle Text, который позволяет нам создавать специальные индексы, оптимизированные для поиска слов в произвольном тексте. Требуется администратор базы данных для установки некоторых дополнительных библиотек и предоставления грантов. Узнайте больше .