【发布时间】:2010-11-02 00:04:12
【问题描述】:
我有一个包含大约 500 万条记录的 Postgres 表,我想找到与输入键最接近的匹配项。我尝试在 pg_trgm 模块中使用 trigram,但每次查询大约需要 5 秒,这对于我的需求来说太慢了。
有没有更快的方法在 Postgres 中进行模糊匹配?
【问题讨论】:
-
键的结构是怎样的?字母数字?仅限整数?
-
索引建立在文本类型的属性之上。
-
请向我们展示您的查询“解释分析”的输出。
-
解释分析 select * from fbsimple where lower(en) % 'france';查询计划------------------------------------------------ ---------- fbsimple 上的位图堆扫描 (cost=399.17..20762.45 rows=5600 width=898) (实际时间=2965.130..8722.165 rows=20 loops=1) Filter: (lower(en ) % 'france'::text) -> 位图索引扫描 lower_trgm_idx (cost=0.00..397.77 rows=5600 width=0) (实际时间=2404.114..2404.114 rows=43677 loops=1) Index Cond: (lower (en) % 'france'::text) 总运行时间:8741.179 毫秒(5 行)
-
上述方案中提到的索引为:CREATE INDEX lower_trgm_idx ON fbsimple USING gin (lower(en) gin_trgm_ops);
标签: database postgresql indexing fuzzy-search