【问题标题】:How to speed up pg_trgm?如何加快 pg_trgm?
【发布时间】:2018-03-09 12:04:07
【问题描述】:

创建表:

CREATE TABLE public.personal
    (
      id bigserial NOT NULL PRIMARY KEY,
      first_name character varying(255) NOT NULL,
      last_name character varying(255),
      middle_name character varying(255),
      deleted integer NOT NULL DEFAULT 0
    );

查询:

select last_name, first_name, middle_name, similarity(concat_ws(' ', last_name, first_name, middle_name), 'Smit') AS sml
from personal ORDER BY sml DESC LIMIT 100

如何加快查询速度?

【问题讨论】:

  • edit您的问题并为有问题的表(包括所有索引)添加create table语句,您正在使用的查询和使用生成的执行计划explain (analyze, buffers)Formatted textno screen shots

标签: sql postgresql pg-trgm


【解决方案1】:

the documentation:

CREATE INDEX ON personal USING gist
   ((coalesce(last_name, '')  || ' ' ||
     coalesce(first_name, '') || ' ' ||
     coalesce(middle_name, '')) gist_trgm_ops);

这样查询可能会更快:

SELECT last_name, first_name, middle_name,
   (coalesce(last_name, '')  || ' ' ||
    coalesce(first_name, '') || ' ' ||
    coalesce(middle_name, '')  <-> 'Smit') AS dist
   FROM personal
   ORDER BY dist LIMIT 100;

【讨论】:

  • 谢谢 11.2 秒 -> 752 毫秒。
  • 对于其他人:这里不支持 concat。我用 ||
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
相关资源
最近更新 更多