Я уточняю текстовый поисковый запрос Postgres, чтобы убедиться, что все доступные индексы используются там, где это возможно. У меня есть индекс btree text_pattern_obs в текстовом столбце, и было показано, что этот индекс работает с использованием простого запроса, например:
set enable_seqscan = off; -- ensure that indexes are used even on small tables for this demo
select * from search_table where text_column like 'example'
^^, это дает мне очень быстрый запрос с использованием правильного индекса.
Но когда я хочу заменить мой «примерный» текст одним строковым значением, которое является результатом предыдущей функции или выбора, он возвращается к полному последовательному сканированию таблицы.
with user_input as (select 'example%' as query_string)
select * from search_table, user_input where text_column like query_string
^^ это медленно
Я пробовал использовать приведение типов query_string :: text et c, но безуспешно. И я не могу просто вставить строку в sql напрямую, потому что она неизвестна до тех пор, пока не будут выполнены другие запросы.
Я использую postgres v11, поэтому должны быть доступны все новейшие возможности плана запроса.