考虑到与类似值的字符串列/123/12/34/56/5/,什么是查询所有的最佳方法 ,其中包括给定数量的记录 (12例如)?
/123/12/34/56/5/
12
我脑海中的解决方案是:
SELECT id FROM things WHERE things.path LIKE '%/12/%'
但由于前导,因此AFAIK该查询无法在列上使用索引%。
%
必须有更好的东西。它是什么?
使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。
在PostgreSQL 9.1中,您可以利用该pg_trgm模块并用它构建一个GIN索引。
pg_trgm
CREATE EXTENSION pg_trgm; -- once per database CREATE INDEX things_path_trgm_gin_idx ON things USING gin (path gin_trgm_ops);
您的LIKE表达式即使没有左锚也可以使用此索引。
LIKE
在此处查看depesz的详细演示。
标准化它,如果 可以的话 。