我将正则表达式作为varchar
s存储在列中,我需要将其与传入的输入进行匹配。例如,该表可能包含:
| 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)