sql – 字符串匹配字符串与pg_trgm相似的多列索引?

给这个表:

foos
integer id
string name
string type

和这样的查询:

select * from foos where name ilike '%bar%'

我可以像这样制作一个pg_trgm index来更快地查找:

CREATE INDEX ON foos USING gin (name gin_trgm_ops)

(对?)

我的问题:这样的查询怎么样:

select * from foos where name ilike '%bar%' AND type = 'baz'

我可以创建一个有助于查找两列的索引吗?

(我知道trigram不是严格的全文,但我正在这样标记这个问题)

最佳答案
您可以使用组合不同类型的多列索引.

首先,添加您的案例中所需的两个扩展:

CREATE EXTENSION pg_trgm;
CREATE EXTENSION btree_gist;

pg_trgm允许您使用trigram索引,btree_gist允许您组合gist和b-tree索引,这是您想要的!

对于像这样的查询:

SELECT * FROM foo WHERE type = 'baz' AND name ilike '%bar%';

您现在可以创建一个索引,如:

CREATE INDEX ON foo USING gist (type, name gist_trgm_ops);

像往常一样,查询和索引之间的列顺序必须相同.

转载注明原文:sql – 字符串匹配字符串与pg_trgm相似的多列索引? - 代码日志