我有一个包含一列和 1 亿行文本的表。 文字是简单的1-5个单词的句子。
我的目标是拥有一个可以与自动完成功能一起使用的超快速查询。所以用户输入后我会尽快得到结果。
我尝试了许多不同的索引和
tsvector
功能。
如果你想匹配带有前缀的完整文本,SQL查询将是
SELECT words FROM phrases WHERE words LIKE 'user input%';
带有
text_pattern_ops
运算符类的常规 B 树索引应该可以解决问题。
如果短语太长而无法建立索引或者您想节省空间,则仅索引和查询前缀:
CREATE INDEX ON phrases (substr(words, 1, 50) text_pattern_ops);
然后用
查询SELECT words FROM phrases WHERE substr(words, 1, 50) LIKE 'user input%';
LIKE 运算符慢得可怜。尝试按照此博客
中所述使用 BETWEEN