考虑一个存储正则表达式模式的表。
可以通过给定文本查询这样的表,以查找包含与给定文本匹配的模式的记录。
这可以通过使用反向正则表达式匹配运算符~来实现(通过反向,我的意思是文本值首先出现,然后我们指定一个包含正则表达式模式的字段,如以下示例所示:
DROP TABLE IF EXISTS public.patterntable;
CREATE TABLE IF NOT EXISTS public.patterntable
(
id bigint NOT NULL,
pattern text COLLATE pg_catalog."default" NOT NULL
);
INSERT INTO patterntable (id, pattern) VALUES (1, '.*');
INSERT INTO patterntable (id, pattern) VALUES (2, '^dog');
INSERT INTO patterntable (id, pattern) VALUES (3, 'dog$');
SELECT * FROM patterntable WHERE 'x' ~ pattern;
为了获得结果,数据库引擎运行顺序扫描,这可能是代价高昂的-表可能包含大量记录+存储此类正则表达式模式的许多字段
我的问题:是否有一种方法来索引存储正则表达式模式的列以用于这种查找。
1.在postgres中(我使用的是postgres的最新版本(15.1))
1.在能够索引正则表达式模式的任何其他数据库引擎中
1条答案
按热度按时间kxe2p93d1#
在Postgres中没有办法索引这样的模式,我严重怀疑任何RDBMS中都没有这样的方法。
一个用于反向操作的索引,也就是要搜索的索引字符串的常见情况,至少对于基本模式来说,通过三元组索引是很容易实现的。
索引只适用于不可变的值。这对于 patterns 来说是不可能的,因为它必须根据具体的字符串来计算,以确定它是否匹配。