小编Kri*_*ján的帖子

Postgres 可以索引存储在列中的正则表达式吗?

我将正则表达式作为varchars存储在列中,我需要将其与传入的输入进行匹配。例如,该表可能包含:

| field |     value     |
|-------|---------------|
| email | .*@domain.com |
Run Code Online (Sandbox Code Playgroud)

查询将是:

SELECT *
FROM table
WHERE field = 'email'
  AND 'someone@domain.com' ~* value
Run Code Online (Sandbox Code Playgroud)

我将是第一个承认这很愚蠢的人,尽管它在大约 2 年中做得足够好。该表现在达到了令人震惊的 10k 行,查询速度减慢到 3 秒的数量级。我已经把我们带到了一个更合理的策略,所以这个问题纯粹是学术性的。

如果我保留了这个设置,有什么办法可以提高查找效率吗?我希望有 的一些兄弟姐妹varchar_pattern_ops,但这个查询与解决的问题相反。


有了这个想法,这里是完整的表格、查询和解释。

+------------+-----------------------------+------------------------------------------------------------+
| Column     | Type                        | Modifiers                                                  |
|------------+-----------------------------+------------------------------------------------------------|
| id         | integer                     | not null default nextval('table_id_seq'::regclass)         |
| field      | character varying(255)      | not null                                                   |
| value      | character varying(1000)     | not null                                                   |
| comment    | text …
Run Code Online (Sandbox Code Playgroud)

postgresql index regular-expression postgresql-9.4

4
推荐指数
1
解决办法
2422
查看次数