我正在改进postgres文本搜索查询,以确保尽可能使用所有可用的索引。我在一个文本列上有一个text\u pattern\u obs btree索引,该索引使用了一个简单的查询,如:
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'
^^这给了我一个使用适当索引的超快速查询。
但是,当我想用一个字符串值替换“example”文本时,该字符串值是前一个函数或select的结果,它将恢复为完整的顺序表扫描。
with user_input as (select 'example%' as query_string)
select * from search_table, user_input where text_column like query_string
^^这太慢了
我试过键入casting query\u string::text等,但没有成功。我不能直接将字符串插入到sql中,因为在其他查询执行之前它是未知的。
我使用的是postgresv11,所以应该有所有最新的查询计划聪明可用。
1条答案
按热度按时间vu8f3i0k1#
尝试使用准备好的语句而不是联接:
使用:
我有: