加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL LIKE查询性能变化

发布时间:2020-12-13 16:51:35 所属栏目:百科 来源:网络整理
导读:我已经看到相当大的变化响应时间LIKE查询到我的数据库中的特定表。有时我会得到200-400毫秒(非常可接受)的结果,但其他时候,可能需要30秒的时间才能返回结果。 我知道LIKE查询是非常资源密集,但我只是不明白为什么会有这么大的响应时间的差异。我已经在own
我已经看到相当大的变化响应时间LIKE查询到我的数据库中的特定表。有时我会得到200-400毫秒(非常可接受)的结果,但其他时候,可能需要30秒的时间才能返回结果。

我知道LIKE查询是非常资源密集,但我只是不明白为什么会有这么大的响应时间的差异。我已经在owner1字段上构建了一个btree索引,但我不认为它有助于LIKE查询。任何人都有什么想法?

示例SQL:

SELECT gid,owner1 FORM parcels
WHERE owner1 ILIKE '%someones name%' LIMIT 10

我也试过:

SELECT gid,owner1 FROM parcels
WHERE lower(owner1) LIKE lower('%someones name%') LIMIT 10

和:

SELECT gid,owner1 FROM parcels
WHERE lower(owner1) LIKE lower('someones name%') LIMIT 10

结果类似。
表行数:约95,000。

FTS不支持LIKE

previously accepted answer不正确。 Full Text Search及其全文索引不是为LIKE操作符,它有自己的操作符,不适用于任意字符串。它运行于基于词典和词干的词。它支持字词的前缀匹配,但不支持LIKE运算符:

> Get partial match from GIN indexed TSVECTOR column

LIKE的Trigram索引

安装附加模块pg_trgm,它为GIN and GiST trigram indexes提供运算符类,以支持所有LIKE和ILIKE模式,而不只是左侧锚定模式:

示例索引:

CREATE INDEX tbl_col_gin_trgm_idx  ON tbl USING gin  (col gin_trgm_ops);

要么:

CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);

> Difference between GiST and GIN index

示例查询:

SELECT * FROM tbl WHERE col LIKE '%foo%';   -- leading wildcard
SELECT * FROM tbl WHERE col ILIKE '%foo%';  -- works case insensitive as well

text_pattern_ops用于前缀匹配

对于刚刚左边锚定的模式(没有前导通配符),你得到一个合适的operator class为btree索引:text_pattern_ops或varchar_pattern_ops的最佳。两个内置功能的标准Postgres,无需额外的模块。类似性能,但指数小得多。

示例索引:

CREATE INDEX tbl_col_text_pattern_ops_idx ON tbl(col text_pattern_ops);

示例查询:

SELECT * FROM tbl WHERE col LIKE 'foo%';  -- no leading wildcard

或者,如果您应该使用’C’语言环境(实际上没有语言环境)运行您的数据库,那么一切都按照字节顺序排序,并且使用默认操作符类执行作业的纯B树索引。

更多详细信息,解释,示例和链接在这些相关的答案在dba.SE:

> Pattern matching with LIKE,SIMILAR TO or regular expressions in PostgreSQL
> How is LIKE implemented?
> Finding similar strings with PostgreSQL quickly

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读