小编典典

有效查询包含子字符串的列

sql

考虑到与类似值的字符串列/123/12/34/56/5/,什么是查询所有的最佳方法 ,其中包括给定数量的记录12例如)?

我脑海中的解决方案是:

SELECT id FROM things WHERE things.path LIKE '%/12/%'

但由于前导,因此AFAIK该查询无法在列上使用索引%

必须有更好的东西。它是什么?

使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。


阅读 183

收藏
2021-04-14

共1个答案

小编典典

在PostgreSQL
9.1中,您可以利用该pg_trgm模块并用它构建一个GIN索引。

CREATE EXTENSION pg_trgm; -- once per database

CREATE INDEX things_path_trgm_gin_idx ON things USING gin (path gin_trgm_ops);

您的LIKE表达式即使没有左锚也可以使用此索引。

在此处查看depesz的详细演示

标准化它,如果 可以的话

2021-04-14